gpt4 book ai didi

java - 无法从 bin 读取输入文件

转载 作者:太空宇宙 更新时间:2023-11-04 07:42:50 26 4
gpt4 key购买 nike

呃,伙计们,我写了一些代码来用 Java 读取一个简单的输入文件,一切都工作得很好,但是在代码 checkin 后并且当其他人尝试运行它时,他们的二进制文件找不到该文件(即使该文件就在他们的 bin 文件夹中)!

java.io.FileNotFoundException: C:\blah\bin\com\common\PackageRFCs.properties (The system cannot find the path specified)

因此,在我的工作区中,我有以下结构和文件:

com.test.test.java
com.common.Utility.java
com.common.PackageRFCs.properties

在我的test.java中,我尝试以这种方式读取属性文件:

Class<com.common.Utility> dummy = com.common.Utility.class;
String propURI = dummy.getPackage().getName().replace('.','/') + "/PackageRFCs.properties";
String filepath = ClassLoader.getSystemClassLoader().getResource(propURI).getFile();
...
BufferedReader br = new BufferedReader(new FileReader(filepath));
// do some read line stuff here

上面的代码在我的 Eclipse 下运行得很好,但是当其他人尝试运行它时却失败了。我想我的垃圾箱里可能有一些悬空的文件,所以我做了一个“项目”>“清理”,我仍然能够完美地运行它...我也尝试清理其他用户的工作区,但他们仍然无法读取该文件...WTF 是怎么回事?

我无法重现该问题。

最佳答案

如果您有来自 getResource() 的 URL,则无需将其转换为文件路径并使用 FileReader 打开它(无论如何,这都不起作用,因为 URL.getFile() 的结果不是 native 文件路径,它只是原始 URL 的子字符串)。只需使用 .openStream() 或首先调用 get{System}ResourceAsStream()

BufferedReader br = new BufferedReader(new InputStreamReader(
ClassLoader.getSystemResourceAsStream(propURI), "ISO-8859-1"));

(我假设采用 ISO-8859-1 编码,因为该文件名为 .properties,这是 Java 属性文件的标准编码,但如果这是错误的,则更改编码以匹配该文件)

但是考虑到您已经阐明的结构,使用它会更加健壮

Utility.class.getResourceAsStream("PackageRFCs.properties")

它会自动为您处理包到路径的映射,并且能够处理您的类由系统类加载器以外的类加载器加载的情况。

关于java - 无法从 bin 读取输入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15790473/

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