使用相对路径在JAR中读取文件

约拿:

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

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

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

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

我该如何工作?我只想告诉Java读取与当前类位于同一目录中的文件。

谢谢乔纳

Pablo Ebermann:

当文件位于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:URI,也不应自己使用URL进行文件转换,而应使用new File(url.toURI())这也适用于其他有问题的字符。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章