13

If I write this code, I get this as output --> This first:  and then the other lines

try {
    BufferedReader br = new BufferedReader(new FileReader(
            "myFile.txt"));

    String line;
    while (line = br.readLine() != null) {
        System.out.println(line);
    }
    br.close();

} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

How can I avoid it?

4

2 に答える 2

19

このシーケンスはUTF-8 バイト オーダー マーク (BOM)であるため、最初の行に文字  が表示されます。テキスト ファイルが BOM で始まる場合、メモ帳などの Windows プログラムによって生成された可能性があります。

問題を解決するために、デフォルトのシステム文字エンコーディング (US-ASCII など) ではなく、明示的に UTF-8 としてファイルを読み取ることを選択します。

BufferedReader in = new BufferedReader(
    new InputStreamReader(
        new FileInputStream("myFile.txt"),
        "UTF-8"));

次に、UTF-8 では、バイト シーケンス  が 1 文字 (U+FEFF) にデコードされます。この文字はオプションです。正当な UTF-8 ファイルは、この文字で始まる場合とそうでない場合があります。したがって、最初の文字が U+FEFF の場合のみスキップします。

in.mark(1);
if (in.read() != 0xFEFF)
  in.reset();

これで、残りのコードを続行できます。

于 2013-07-01T13:38:02.387 に答える