2011-06-07 74 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