2014-03-12 95 views
0

這是一個文件的複製數據的代碼轉換成第二個文件如何將數據讀入char數組?

 public class Writer 
     { 
      public static void main(String args[]) throws IOException 
      { 
       File f=new File("D:/test.txt"); 
       FileReader fr=new FileReader(f); 
       char cbuff[]=new char[100]; 
       int c=fr.read(cbuff); 
       System.out.println(c); 
       c=fr.read(cbuff); 
       System.out.println(c); 
       fr.close(); 

       FileWriter fw=new FileWriter("D:/newTest.txt"); 
       fw.write(cbuff); 
       fw.close(); 
      } 
     } 

輸出
-1
我的第一個問題是
我想知道字符數組的該尺寸是1000爲什麼讀取方法第二次返回-1。

我的第二個問題是 Acc。爲[Java文檔](http://docs.oracle.com/javase/7/docs/api/java/io/Reader.html#read%28java.nio.CharBuffer%29

或-1,如果字符的這個源是在其端部


什麼是上述線的意思?

回答

1

我想知道char數組的大小是1000,所以爲什麼讀取方法第二次返回-1。

因爲輸入流不包含更多要讀取的字符。請注意,如果有第二次讀取,您將覆蓋已讀入陣列的內容。

而你的javadoc指向錯誤的方法。您使用the read() method taking a char[] as an argument。 A CharBuffer不是char[]

最後(你最近問了一個關於這個主題的問題,我已經告訴過你了),你應該指定你用來讀取文件和寫入文件的編碼。

+0

所以這條線是真的「因爲你只有67個字符,所以你已經讀完整個文件,所以下一次光標將會在文件的末尾,所以它返回-1。在另一個世界裏,沒有任何東西留給閱讀「 – TruePS

+1

是的,就是這樣。另外請注意我對第二次閱讀的評論。還要注意,對於當前代碼,目標文件_will_的長度爲100個字符(實際大小取決於編碼),而字符67之後的其餘部分將填充零。 – fge

+0

好吧,我最後一件事情,在我指出這條線是什麼意思的閱讀方法「或-1如果這個字符的來源是其末尾 – TruePS

1

,當你這樣做:

fr.read(cbuff); 

因爲你只有67字符,您已經閱讀整個文件,所以下一次光標會在文件的末尾,所以返回-1。在另一個世界上,沒有什麼可以閱讀的。

+0

確定,但在閱讀方法的情況下,我指出這條線是什麼意思「或-1,如果這個字符的來源是在其末尾」 – TruePS

+1

這意味着它會返回字符數已被閱讀,花葯明智的是,如果文件中沒有數據或其完成的讀數,它將返回-1。 – Salah

1

當你第一次被fr.read(cbuff)文件和總焦炭在那麼它的閱讀文字閱讀是67,所以它顯示67現在光標的移動,當你正在閱讀那麼下一次文件結尾發現EOF這就是爲什麼返回-1。