gpt4 book ai didi

java - 运行jar时的当前目录路径

转载 作者:行者123 更新时间:2023-11-30 01:51:21 25 4
gpt4 key购买 nike

我的程序通过从当前目录读取xml文件来读取配置数据:

File fXmlFile = new File("configFile.xml");

它在 NetBeans IDE 中运行良好。我已经构建了项目并获得了 jar 文件。如果我在 Windows 10 中双击它,它运行正常。如果我使用右键单击 jar 打开文件,并且 Open with -> Java 程序找不到配置文件。在这种情况下,我遇到了异常:

java.io.FileNotFoundException: C:\Windows\System32\configFile.xml (The system cannot find the file specified)

为什么它只查找系统路径而不是当前目录?在 Open with -> Java 情况下运行时如何要求程序加载当前目录中的文件?

Jar 的 list 文件:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.10.4
Created-By: 12.0.1+12 (Oracle Corporation)
Class-Path: lib/log4j-api-2.11.2.jar lib/log4j-core-2.11.2.jar lib/met
ouia.jar lib/swt.jar
X-COMMENT: Main-Class will be added automatically by build
Main-Class: com.aaa.myprog.runMe

最佳答案

读取 config.xml 和应用程序可能需要的其他资源的最佳方法是将它们放入 src/main/resources 中,然后将它们作为文件引用你的类路径,像这样:

外壳

mv configFile.xml /users/vico/my_program/src/main/resources

Java 代码

// ...

public static File getResourceAsFile(String resourcePath) {
try {
InputStream in = ClassLoader.getSystemClassLoader().getResourceAsStream(resourcePath);
if (in == null) {
return null;
}

File tempFile = File.createTempFile(String.valueOf(in.hashCode()), ".tmp");
tempFile.deleteOnExit();

try (FileOutputStream out = new FileOutputStream(tempFile)) {
//copy stream
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
}
return tempFile;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}

File fXmlFile = getResourceAsFile("configFile.xml");

// ...

(此代码借自 this stackoverflow answer )

然后您可以将 jar 移动到任何您想要的位置,甚至将其发送给您的用户,而不必担心配置文件所在的位置。

关于java - 运行jar时的当前目录路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55937754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com