2013-03-24 66 views
1

我正在嘗試使用Class In(http://introcs.cs.princeton.edu/java/stdlib/javadoc/)來讀取文件,而我沒有收到任何迴應。我的代碼目前是:Java:文件閱讀與類中。爲什麼沒有輸出?

public class TestingIn { 

    public static void main(String [] args){ 

     In file = new In("textfile.txt"); 
     while (!file.isEmpty()) { 
      String str = file.readAll(); 
      System.out.println(str.substring(0, 100)); 
      System.out.println("abc: testing the file"); 
     } 

     System.out.println("123: testing compilation"); 
    } 
} 

打算打印兩個測試字符串和文件textfile.txt的前100個字符。代碼編譯正常並打印出測試字符串「123:測試編譯」,但它不打印出字符串「abc:測試文件」或文件的前100個字符(如果這樣會產生任何影響,則爲http://www.gutenberg.org/files/39063/39063-0.txt )。

我正在使用eclipse,並將textfile.txt放置在我的項目頂層。到目前爲止我嘗試過的東西包括查看上面鏈接的API,谷歌搜索(這是因爲單詞In is common有點棘手),搜索stackoverflow,搜索文件輸入方法(主要是掃描儀),更改我的代碼爲:

while (!file.isEmpty()) { 
    String line = file.readLine(); 
    if (line.contains("mountain")) 
    System.out.println(line); 
} 

當然,將其關閉並再次打開。感謝您抽出時間來閱讀。

+0

您正在'In'類的構造函數中指定文件名,而不是路徑。 Java文檔沒有提到從哪裏獲取文件。有一個方法'exists()';你可以打電話,並檢查文件是否正在加載。 – Kshitij 2013-03-24 10:42:56

+0

System.out.println(file.exists());返回true – user2172005 2013-03-24 11:01:21

+0

另一種方式來讀取整個文件作爲一個字符串,沒有第三方庫:'String str = new String(Files.readAllBytes(Paths.get(「textfile.txt」)),StandardCharsets.UTF_8);' – VGR 2013-03-24 11:29:38

回答

0

您可以改用下面的代碼。

String line = null; 
while ((line = file.readLine()) != null) { 
    if (line.contains("Mountain")) 
    System.out.println(line); 
} 
+0

它似乎並不想編譯,除非我從第二行刪除單詞字符串:「while((line = file.readLine())!= null){」 我仍然沒有得到任何輸出它。 – user2172005 2013-03-24 10:30:02

+0

是的,我已經更新了這一行..你確定你的文件是非空的?如果它不是空的,它是否包含字母「mountain」這個單詞? – 2013-03-24 10:31:57

+0

是的,它的文本文件鏈接。我認爲它在正確的位置,因爲如果我改變它的名字,代碼將停止編譯。 – user2172005 2013-03-24 10:34:29

0

該代碼是非常好的,艱難的,我不知道類In的內部運作。

嘗試如下:

1)確保您的文件是你讀取,通過調用下面的函數:(假設你使用的是Java SE 7)

public static boolean isReadable(Path path) 

2)由於文檔在類中說readAll():「讀取並以字符串形式返回輸入的其餘部分。」通過使用In類中給出的相應函數,倒轉文件(在文件開頭處移動文件)會更好。

希望它有幫助!

+0

開始循環之前檢查文件是否爲空啊,如果我改爲: In file = new In(「textfile.txt」); System.out.println(file.hasNextLine()); 我得到「false」返回。我不能看到如何返回到文件的開頭。 – user2172005 2013-03-24 10:58:40

+0

文件可讀?你提供了構造函數的完整路徑嗎? – 2013-03-24 11:02:02