2011-06-07 73 views
1

你好,我有这个在我的代码问题与Java的FileReader

File file = new File("words.txt"); 
    Scanner scanFile = new Scanner(new FileReader(file)); 
    ArrayList<String> words = new ArrayList<String>(); 

    String theWord;  
    while (scanFile.hasNext()){ 
     theWord = scanFile.next(); 
     words.add(theWord); 
    } 

但由于某种原因,我得到一个

java.io.FileNotFoundException

我有话在同一文件夹中的所有我的.java文件

我在做什么错。txt文件?谢谢!

+0

您如何执行该计划?从命令行或从IDE。大多数IDE都可以选择指定应用程序的工作目录。你将不得不把你的文件放在那里。 – 2011-06-07 13:50:01

+0

文件是否已经在别处打开(包括代码中其他地方未被关闭)?对于'java.io.FileReader.FileReader(java.io.File中)'的Javadoc指出了'FileNotFoundException'抛出“如果文件不存在,是一个目录,而不是一个常规文件,或者由于某些其他原因不能打开阅读。“如果你确定文件存在并且它是一个常规文件,那么肯定有一些无法打开的原因。确保文件的权限允许阅读。 – 2011-06-07 13:55:58

回答

6

提示:这一行添加到您的代码......

System.out.println(file.getAbsolutePath()); 

然后比较您的文件实际上是一个路径。问题应该立即显而易见。

5

该文件应驻留在您的目录执行该应用程序,即工作目录

2

您还没有指定一个绝对路径。因此,路径将被视为相对于当前进程工作目录的路径。通常这是您启动Main-Class的目录。

如果你不确定的工作目录的位置,你可以使用下面的代码片段把它打印出来:

System.out.println(System.getProperty("user.dir")); 

解决这个问题,需要在原有的路径添加必要的目录,以找到文件。

4

一般来说这是一个好主意,打包的数据文件与您的代码,但是如果使用java.io.File读他们是一个问题,因为它很难找到他们。该解决方案是使用getResource()方法java.lang.ClassLoader打开流的文件。这样,ClassLoader就会在您的代码所在的位置查找您的文件,无论它在哪里。

3

尝试:

URL url = this.getClass().getResource("words.txt"); 
File file = new File(url.getPath()); 
+3

或者干脆'的InputStream流= this.getClass()的getResourceAsStream( “words.txt”);' – 2011-06-07 13:54:55

+0

感谢你们。这有所帮助 – Fabi 2017-02-10 13:45:36