java - java - 读取与jar文件相同目录中的配置文件
问题描述
我在 Intellij 中有一个简单的程序,我只是为了测试配置文件的读取文件路径。
我创建了一个简单的测试用例,我将使用计时器以 N 个间隔定期打印“Hello world”,其中 N 以毫秒为单位,N 是可配置的。
这是代码:
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 文件之外读取配置文件的问题,但没有一个对我有用。我在这里做错了吗?
解决方案
./config.properties
是指向config.properties
当前工作目录中文件的相对路径。
当前工作目录,除非由 更改,否则System.setProperty("user.dir", newPath)
将是您启动当前处理您的代码的 JVM 的目录。
要让你的 jar 像现在这样工作,你有两种方法可用:
- 将文件复制
config.properties
到您正在执行的java
目录 - 将您正在运行的目录更改为
java
包含config.properties
您还可以考虑让用户指定从何处获取属性文件:
String path = System.getProperty("propertiesLocation", "config.properties");
然后,您可以在调用 jar 时指定属性文件的位置:
java -jar /path/to/your.jar -DpropertiesLocation=/path/to/your.properties
config.properties
或者像以前一样调用它,在当前工作目录的默认位置搜索属性。
推荐阅读
- c++ - EqualityComparable 特质解释
- kubernetes-helm - Tiller 已安装但 Helm 未找到
- javascript - 具有多个允许部分/时隙的 Javascript 滑块
- php - 如何找出服务器将承受的负载以及如何开发高负载项目?
- c# - 'SchoolContext.OnConfiguring(DbContextOptionsBuilder)':找不到合适的方法来覆盖
- java - OneLogin SSO java实现
- php - 如何用 eloquent 过滤这个
- swift - 如何将数字添加到始终使用两个字符表示的字符串?
- javascript - 如何从Mysql连接的响应中获取数据
- javascript - 如何使用 Ramda 编写无点函数式 JS