2016-03-22 22 views
0

read()およびread(char[] ch)メソッドを使用して、FileReaderオブジェクトのファイルからすべての文字を読み込みます。しかし、私はこれらの両方の方法を使用しようとすると、出力は1つだけになります。ここでJavaのFileReaderメソッドread()およびread(char [])

は私のコードスニペットです:while一部が実行されていない理由を

class FR 
{ 
    void filereader() throws Exception 
    { 
     File f = new File("abc.txt"); 
     FileReader fr = new FileReader(f); 
     char[] ch = new char[(int)f.length()]; 
     fr.read(ch); 
     for (char ch1 : ch) 
     { 
      System.out.print(ch1); 
     } 
     System.out.println("\n*********************************"); 
     int i = fr.read(); 
     while(i != -1) 
     { 
      System.out.print((char)i); 
      i = fr.read(); 
     } 
     fr.close(); 
    } 
} 

誰かが説明していただけますか?

+0

'abc.txt'の内容は何ですか? – Idos

+0

ちょうど私の名前、私の大学、私のコースはすべて別々の行にあります。 – Karthi13

+2

注: 'f.length()'はバイト単位の長さで、charsではありません。マルチバイト文字がある場合、実際の文字数は少なくなります。 –

答えて

3

あなたが実行します。あなたが効果的にファイル全体を読んでいる

char[] ch = new char[(int)f.length()]; 
fr.read(ch); 

。それは、ファイルの終わりだからその後
readへのすべての呼び出しは-1を返します。

は文字数が読み、または-1ストリームの終わりに達した場合は返し

入力/出力hereで使用例を見ることができます。

ファイルを1単語ずつまたは1行ずつ読みたい場合は、Scannerを参照してください。

1

あなたのfr.read(ch)コールはファイル全体を読み取ります。
この後にfr.read()を呼び出すと、EOFが検出され、文字は返されません。

コードの読み取りセクションの順序を変更すると、異なる動作が表示されます。

また、fr.read(ch)コールで読み取った文字数を確認する必要があります。これはこれの手がかりを与えていたはずです。

+0

Grt !!!それはたくさんの助けになりました。だから、実行する 'while'ブロックのために新しい' FileReader'オブジェクトを追加する必要があります..... – Karthi13

関連する問題