2013-10-06 75 views
0

我想使用BufferedReader在JAVA中打開一個文件,但它無法打開該文件。這是我的代碼無法在JAVA中打開文件

public static void main(String[] args) { 


    try 
    { 

     BufferedReader reader = new BufferedReader(new FileReader("test.txt")); 

     String line = null; 
     while ((reader.readLine()!= null)) 
     { 
      line = reader.readLine(); 
      System.out.println(line); 
     } 
     reader.close();   
    } 
    catch(Exception ex) 
    { 
     System.out.println("Unable to open file ");    
    } 

} 

它發生異常並打印無法打開文件。任何建議爲什麼我無法閱讀它。

+5

您是否想過打印異常消息? –

+0

不要抓住'Exception'。你不會知道它是什麼類型的「Exception」。取而代之的是抓住特定的'IOException'。 –

+1

我同意上面的評論。而不是你的System.out.println,使用「ex.printStackTrace()」。這會給你一些基本的細節。如果我不得不猜測,事實上你沒有指定文件的路徑是問題。這會導致類似「FileNotFoundException」的事情。 – EJK

回答

-1

嘗試做一個檢查,如果它存在的第一:

File file = new File("test.txt"); 
if (!file.exists()) { 
    System.err.println(file.getName() + " not found. Full path: " + file.getAbsolutePath()); 
    /* Handling code, or */ 
    return; 
} 
BufferedReader reader = new BufferedReader(new FileReader(file)); 
/* other code... */ 
+0

任何關於downvote的評論? – Rogue

+0

這沒有意義。異常消息可以告訴你同樣的事情,或者可能是不同的事情,例如,如果你沒有讀取權限。它也容易受到時間窗口問題的影響:文件的存在可以在'exists()'測試和構造'FileReader'之間改變。這也是多餘的。沒有什麼可以推薦它。 – EJP

+0

儘管時機已經足夠,但我認爲檢查一下它是否存在,然後處理會更簡單一些。 要考慮的另一件事是file.exists()返回false和拋出FileNotFoundException的Reader(File)並不意味着同樣的事情。 file.exists()將爲目錄返回true,並且對於沒有讀取權限的普通文件可能會返回true,而Reader在這些情況下將拋出FileNotFoundException – Rogue

0

我不知道爲什麼會這樣,但問題似乎我沒有輸入完整的路徑的文件,即使該文件是相同的文件夾。理想情況下,如果文件在同一個文件夾中,那麼我不需要輸入整個路徑名。

1

如果你想更接近現代,嘗試了Java 7的解決方案,從Paths的Javadoc採取:

final Path path = FileSystems.getDefault().getPath("test.txt"); // working directory 
try (final Reader r = Files.newBufferedReader(path, StandardCharsets.UTF_8)) { 
    String line = null;   
    while ((line = r.readLine()) != null) { 
     System.out.println(line); 
    } 
} // No need for catch; let IOExceptions bubble up. 
    // No need for finally; try-with-resources auto-closes. 

你需要申報mainIOException,不過沒關係。無論如何,你沒有連貫的方式處理IOException。如果觸發異常,只需讀取堆棧跟蹤。