使用 java 属性文件时出现 FileNotFoundException

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/19304651/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 15:53:51  来源:igfitidea点击:

FileNotFoundException when using java properties file

javafile-ioruntime.exec

提问by user2821894

am asking this question after doing a lot of research and also implementing it in my code after the research but I ended up with FileNotFoundException.What exactly am doing here is I want to avoid hardcoding in my java code so am creating a properties file with name as Constants.properties and am calling it in my java code. but it says that it is not finding the file. My properties file is in the src folder of the project. Below is the code snippet. Any suggestions?

我在做了大量研究后问了这个问题,并在研究后在我的代码中实现了它,但我最终得到了 FileNotFoundException。我在这里做的是我想避免在我的 Java 代码中进行硬编码,所以我创建了一个带有名称的属性文件作为 Constants.properties 并在我的 Java 代码中调用它。但它说它没有找到该文件。我的属性文件位于项目的 src 文件夹中。下面是代码片段。有什么建议?

Properties file:

属性文件:

executable.run = C:\server\lrd.exe
incoming.file = C:\file\test.ic
executable.params1 = -z
executable.params2 = -a[+]
log.file = C:\TESTFile\test.txt

Java Code: This is the class file which has the properties file details.

Java 代码:这是具有属性文件详细信息的类文件。

public class PropInfo {
    static private PropInfo _instance =  null;
    public String executable =  null;
    public String filein = null;
    public String params1 = null; 
    public String params2 = null; 
    public String log = null; 

    protected PropInfo(){
        try{
            InputStream file = new FileInputStream(new File("Constants.properties"));
            Properties props = new Properties();
            props.load(file);
            executable = props.getProperty("executable.run");
            filein = props.getProperty("incomin.file");
            params1 = props.getProperty("executable.params1");
            params2 = props.getProperty("executable.params2");
            log = props.getProperty("log.file");
        } 
        catch(Exception e){
            System.out.println("error" + e);
        }    
    }

    static public PropInfo instance(){
        if(_instance == null){
            _instance = new PropInfo();
        }
        return _instance;
    }
}

Main Class:

主要类:

try{
    PropInfo propinfo = PropInfo.instance();
    String connString = propinfo.executable + " " + propinfo.params1 + " " + 
            propinfo.filein + " " + propinfo.params2 + " " + " " + propinfo.log ;

    Runtime rt = Runtime.getRuntime();
    // Process pr = rt.exec 
    // (PropInfo.executable+" "+PropInfo.params1+" "+PropInfo.filein+" "
    //+PropInfo.params2+" "+PropInfo.log);
    Process pr = rt.exec(connString);

    BufferedReader input = new BufferedReader(new InputStreamReader (pr.getInputStream()));

    String line=null;
    StringBuffer start= new StringBuffer();
    while((line=input.readLine()) != null) {
        start.append("Started" + line + "\n");
        System.out.println(line);
    }

    // System.out.println("browse");

}
catch (Throwable t)  
{  
    t.printStackTrace();  
}  
finally 
{  
}

Gives this Exception:

给出这个异常:

errorjava.io.FileNotFoundException: Constants.properties (The system cannot find the  
file specified)
java.io.IOException: Cannot run program "null": CreateProcess error=2, The system  
cannot find the file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1042)
at java.lang.Runtime.exec(Runtime.java:615)
at java.lang.Runtime.exec(Runtime.java:448)
at java.lang.Runtime.exec(Runtime.java:345)
at com.emc.clp.license.StartTest.main(StartTest.java:44)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the 
 file     specified
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:288)
at java.lang.ProcessImpl.start(ProcessImpl.java:133)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1023)
... 4 more

采纳答案by Axel

Yes, don't put your properties file into the src folder. Put it where you start the jvm from (or provide an absolute path). Also I really suggest getting rid of forward slashes in path names.

是的,不要将您的属性文件放入 src 文件夹。将它放在您启动 jvm 的位置(或提供绝对路径)。另外我真的建议去掉路径名中的正斜杠。

UPDATE: Add this to find out where to put your file:

更新:添加此内容以找出放置文件的位置:

System.out.println(new File(".").getAbsolutePath());

回答by melc

The way you load Constants.properties it should be right under your src package package at the level where your packaging starts.

你加载 Constants.properties 的方式应该在你的 src 包包下,在你的包开始的级别。

for example,

例如,

if you hava src/java/propinfopackage/PropInfo

如果你有 src/java/propinfopackage/PropInfo

put it inside java folder and call it as follows

把它放在java文件夹中并按如下方式调用它

    InputStream propertiesInputStream = null;
                Properties properties = new Properties();
                propertiesInputStream = PropInfo.class.getClassLoader().getResourceAsStream("/Constants.properties");
                properties.load(propertiesInputStream);
  String value = properties.getProperty("executable.run");
.......

回答by Philipe

I had the same problem and it was solved like this:

我有同样的问题,它是这样解决的:

Properties prop = new Properties();
try {
    prop.load(getClass().getResourceAsStream("/com/my/package/Constants.properties"));//here your src folder
    System.out.println(prop.getProperty("executable.run"));

} catch(IOException e) {}

回答by sashikanta

Make sure your properties file is in root path of the project. Right click on project and paste the properties file. Your error will go.

确保您的属性文件位于项目的根路径中。右键单击项目并粘贴属性文件。你的错误会消失。

Also refer @Axel Answer above. It will resolve your issue.

另请参阅上面的@Axel 答案。它将解决您的问题。