3

次のコード行があります。また、numbers.txt には、123456789 という数字の文字列があります。実行すると、235689 が出力されます。なんで?.read() は何をしますか? 'while(fin.read() > -1 )' が TRUE の場合は? また、例外については、プログラムが正しいので、使用していないときに IOException エラーが発生するのはなぜですか?

import java.io.*;

public class Read {


    public static void main(String[] args) throws Exception {



        FileReader fin = new FileReader("numbers.txt");

        while(fin.read() > -1 ){

         System.out.print((char) fin.read());
         System.out.print((char) fin.read());

        }
        fin.close(); 


    }

}
4

3 に答える 3

4

3文字ごとに破棄しています。読んだ文字を保存して印刷することをお勧めします。

for(int ch; (ch = fin.read()) > -1; )
     System.out.print((char) ch);

このように代わりに BufferedReader を使用することをお勧めします

try(BufferedReader br = new BufferedReader(new FileReader("numbers.txt"))) {
    for(String line; (line = br.readLine()) != null; )
        System.out.println(line);
} // closes the br
于 2013-06-14T00:40:54.603 に答える
2

Read は、 から読み取った値を値InputStreamとして返しintます。

ファイルの終わりを超えて読んでいます。

値を読み取って、使用できる変数に格納する必要があります...

FileReader fin = null
try {
    fin = new FileReader("numbers.txt");
    int in = -1;
    while((in = fin.read()) > -1 ){
        System.out.print((char)in);
    }
} finally {
    try {
        fin.close(); 
    } catch (Exception exp) {}
}

詳細については、 Basic I/Oを詳しく調べることをお勧めします。

ps- ストリームを開いた場合は、それを閉じる必要があります ;)

于 2013-06-14T00:41:46.727 に答える
0

FileReader.read() は、デフォルトのエンコーディングに応じてファイルから 1 バイト以上を読み取り、それを char に変換し、char を int にキャストして返します。EOF に達した場合は -1 を返します。これは、リーダーから EOS までの読み取り方法です。

for(int c; (c = rdr.read()) != -1;) {
     System.out.print((char)c);
}
于 2013-06-14T01:22:31.513 に答える