2011-05-01 76 views
1

我想這聽起來很瘋狂,但我正在從一個文件中讀取,而且它似乎跳過了文件的第一行。爲什麼用BufferedReader讀取文件註釋的第一行?

這是怎麼回事?

這裏是源:


    private void loadFile(String fileNPath) 
    { 
     StringBuilder currentFileContents = new StringBuilder(); 
     CharBuffer contentsBuffer = CharBuffer.allocate(65536); 

     int status=0; 
     try 
     { 
      BufferedReader in = new BufferedReader(new FileReader(fileNPath)); 

      while(status!=-1) 
      { 
       status=in.read(contentsBuffer); 
       currentFileContents.append(contentsBuffer); 
       contentsBuffer.clear(); 
      } 

      System.out.println(currentFileContents.toString()); 
     } 
     catch(FileNotFoundException n) 
     { 
      //Should be imposible 
     } 
     catch(IOException n) 
     { 
      n.printStackTrace(System.out); 
     } 

    } 

它必須是什麼我俯瞰。

我複製並粘貼確切的來源,所以我希望這也發生在你身上。

感謝, caalip

+0

我只拿到文件的第二行,然後。 – 2011-05-01 22:02:27

回答

0

我會用文件實用程序。 readFileToString(文件)它在一行中做到這一點。

但是,當我在文本文件上運行代碼時,我會看到每一行。我懷疑問題不在你的代碼中。

+0

你的意思是apache commons FileUtils? – 2011-05-01 22:01:34

+0

是的,我添加了一個鏈接並更正了方法的名稱。 – 2011-05-01 22:10:15

1

這似乎有點奇怪。嘗試更改您的嘗試塊到:

try 
    { 
     BufferedReader in = new BufferedReader(new FileReader(fileNPath)); 

     status=in.read(contentsBuffer.array(), 0, 65536); 
     currentFileContents.append(contentsBuffer); 

     System.out.println(currentFileContents.toString()); 
    } 

我還沒有運行此代碼,但給它一個鏡頭。

更新:我運行了你的代碼,遇到了你描述的問題。我用我的修訂版運行了代碼,它工作正常。

+0

但如果文件大小太大?這個邏輯會起作用嗎?我想你正在做的是從0到65536讀取文件。但如果尺寸si超過了這個數字呢? – Deepak 2011-05-01 22:31:06

+0

我簡單地將CharBuffer中分配的字符數與應讀取的字符數進行匹配。如果文件較大,則此方法不適用。 – Zach 2011-05-01 22:34:38

+0

什麼是循環中的問題?你有什麼想法嗎? – Deepak 2011-05-01 22:37:59

3

您是否按照這種方式閱讀文件是否有特殊原因?

您使用的父類的方法(BufferedReader沒有read(CharBuffer)方法,例如),也...的CharBuffer本身是有點矯枉過正。我懷疑實際的問題是你沒有正確使用它(通常你翻轉並排空Buffer對象,但我不得不捅更多的東西來看看它是如何操縱它的)

你只需要閱讀一個文件是:

StringBuilder currentFileContents = new StringBuilder(); 
try 
{ 
    BufferedReader in = new BufferedReader(new FileReader(fileNPath)); 
    String line = null; 
    while((line = in.readline()) != null) 
    { 
     currentFileContents.append(line); 
    } 

    System.out.println(currentFileContents.toString()); 
} 
catch(FileNotFoundException n) 
{ 
    //Should be imposible 
} 
catch(IOException n) 
{ 
    n.printStackTrace(System.out); 
} 
+0

我認爲一次讀取數據可能會比較慢。 – 2011-05-02 11:39:30

+0

嗯......是的......這就是所謂的「過早優化」,可能不正確。這就是爲什麼你首先使用BufferedReader的原因。 – 2011-05-02 13:28:18

相關問題