当ClassLoader.getSystemRessource(filename)给出结果时,为什么会出现FileNotFoundException?

时间:2012-07-05 10:04:04

标签: java bufferedreader filenotfoundexception filereader

我当前的应用程序需要从文件中获取数据以初始化其属性。 它需要存储在一个文件中才能修改用户。

String strFile = ClassLoader.getSystemResource("myFile.csv").getPath();
if(strFile==null)
        throw new Exception("File not find");
BufferedReader br = new BufferedReader(new FileReader(strFile));
//Begin reading file process..

我的问题是strFile不是null,但是在br初始化时我有 java.io.FileNotFoundException ,请参阅以下堆栈:

java.io.FileNotFoundException: C:\Users\TH951S\My%20Documents\Eclipse\Workspace
                                 \My%20App\bin\myFile.csv 
                                 (The system cannot find the path specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileReader.<init>(Unknown Source)

我检查了文件是否在指定的路径中,一切似乎都正确。

有谁知道为什么会这样?或者在路径未知时有另一种获取文件的方法吗?

感谢阅读和更多回答,

2 个答案:

答案 0 :(得分:2)

我解决了我的问题,其中一个让你因为没有尽快解决它而感到愚蠢。

URL正在编码值为%20的空格,而Java在FileReader初始化时不会用空格字符替换值。因此,有必要将%20改为" "

还有另一种计算方法。也可以使用BufferedReader初始化InputStreamReader,如下所示:

InputStream in=ClassLoader.getSystemResourceAsStream("myFile.csv");
BufferedReader br = new BufferedReader(new InputStreamReader(in));

希望它有助于其他人,

答案 1 :(得分:1)

为了完整性:我遇到了同样的问题,但结果已经成为File对象(因为我需要文件的大小)。

URL url = ClassLoader.getSystemResource("myFile.csv");
File file = new File(url.toURI());
System.out.println("Correct path: " + file.getAbsolutePath());
System.out.println("Size of file: " + file.length());

该解决方案的灵感来自sysLoader.getResource() problem in java

我很惊讶我必须经历这么多课程,但我没有找到更接近的解决方案。