gpt4 book ai didi

java - 使用相对路径读取 JAR 中的文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:49:46 25 4
gpt4 key购买 nike

我有一些文本配置文件需要我的程序读取。我当前的代码是:

protected File getConfigFile() {
URL url = getClass().getResource("wof.txt");
return new File(url.getFile().replaceAll("%20", " "));
}

当我在 eclipse 中本地运行它时,这有效,尽管我确实必须进行 hack 处理路径名中的空格。配置文件与上述方法在同一个包中。但是,当我将应用程序导出为 jar 时,我遇到了问题。该 jar 存在于共享的映射网络驱动器 Z: 中。当我从命令行运行应用程序时出现此错误:

java.io.FileNotFoundException: 文件:\Z:\apps\jar\apps.jar!\vp\fsm\configs\wof.txt

我怎样才能让它工作?我只是想告诉 java 读取与当前类相同目录中的文件。

谢谢,约拿

最佳答案

当文件在 jar 中时,您不能使用 File 类来表示它,因为它是一个 jar: URI。相反,URL 类本身已经为您提供了 openStream() 读取内容的可能性。

或者您可以使用 getResourceAsStream() 而不是 getResource() 来简化此操作。

要获得 BufferedReader(更易于使用,因为它具有 readLine() 方法),请使用通常的流包装:

InputStream configStream = getClass().getResourceAsStream("wof.txt");
BufferedReader configReader = new BufferedReader(new InputStreamReader(configStream, "UTF-8"));

使用文件实际使用的编码(即您在编辑器中使用的编码)代替“UTF-8”。


还有一点:即使你只有file: URIs,你也不应该自己做URL到File的转换,而是使用new File(url.toURI())。这也适用于其他有问题的角色。

关于java - 使用相对路径读取 JAR 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5054435/

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