我在Intellij中有一个简单的程序,我只是为了测试读取配置文件的文件路径而制作的。
我创建了一个简单的测试用例,其中我将使用计时器以N个间隔(其中N以毫秒为单位,并且N是可配置的)定期打印“ Hello world”。
这是代码:
public void schedule() throws Exception {
Properties props=new Properties();
String path ="./config.properties";
FileInputStream fis=new FileInputStream(path);
BufferedReader in1=new BufferedReader(new InputStreamReader(fis));
// InputStream in = getClass().getResourceAsStream("/config.properties");
props.load(in1);
in1.close();
int value=Integer.parseInt(props.getProperty("value"));
Timer t=new Timer();
t.scheduleAtFixedRate(
new TimerTask() {
@Override
public void run() {
// System.out.println("HELEOELE");
try {
// test.index();
System.out.println("hello ");
} catch (Exception e) {
e.printStackTrace();
}
}
},
0,
value);
}
我所做的是我在配置文件中将值设置为N,任何人都可以更改它而无需触摸实际代码。因此,我编译了jar文件,并将config.properties和jar文件都放在了相同的文件夹或目录中。我希望能够将N更改为可变的,所以我不需要每次都重新编译jar。
注意:配置属性文件是手动创建的,并与jar放在同一目录中。我正在命令提示符下执行jar。
但是,当我尝试运行它时,似乎无法识别文件路径。
"main" java.io.FileNotFoundException: .\config.properties (The system cannot find the file specified)
我研究了许多有关读取jar文件之外的配置文件的问题,但这些问题都不适合我。我在这里犯错了吗?
答案 0 :(得分:2)
./config.properties
是指向当前工作目录中的config.properties
文件的相对路径。
除非通过System.setProperty("user.dir", newPath)
进行更改,否则当前工作目录将是您启动了JVM的目录,当前正在处理您的代码。
要使您的jar保持当前状态,您有两种可用方法:
config.properties
文件复制到您从中启动jar的目录中config.properties
(和jar)的目录您还可以考虑让用户指定从何处获取属性文件:
String path = System.getProperty("propertiesLocation", "config.properties");
然后,您可以在调用jar时为属性文件指定位置:
java -jar /path/to/your.jar -DpropertiesLocation=/path/to/your.properties
或者像以前一样调用它,以在当前工作目录的默认位置config.properties
上搜索属性。