0

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

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不为空,但在初始化时我有一个java.io.FileNotFoundExceptionbr,请参见以下堆栈:

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)

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

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

感谢阅读和更多的回答,

4

2 回答 2

3

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

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

还有另一种计数方式。也可以BufferedReader使用InputStreamReader如下方式初始化:

InputStream in=ClassLoader.getSystemResourceAsStream("myFile.csv");
BufferedReader br = new BufferedReader(new InputStreamReader(in));
于 2012-07-05T10:04:04.377 回答
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());

该解决方案的灵感来自java 中的 sysLoader.getResource() 问题

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

于 2015-10-22T10:26:09.373 回答