2013-07-01 47 views
10

私はこのコードを記述する場合、私は出力としてこれを取得 - >この最初: し、他のラインはどのようテキストファイルからの読み込みの最初の文字:

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(); 
} 

それを避けることはできますか?

+0

エンコードされていると思います。 –

+3

おそらくBOMですか? https://en.wikipedia.org/wiki/Byte_order_mark –

+1

これは[UTF-8 BOM](https://en.wikipedia.org/wiki/Byte_order_mark)です。 –

答えて

1

問題はエンコードされている可能性があります。 これを試してみてください。

BufferedReader in = new BufferedReader(new InputStreamReader(
     new FileInputStream("yourfile"), "UTF-8")); 
+0

私はそれを言うでしょう*確かに*エンコーディングです;) – Joey

+2

私はすでに試してみました。 の代わりに '?' – Milton90

+0

これはIDEを使用している可能性があります。時にはネイティブオペレーティングシステムのデフォルトエンコードを設定することもあります – Tala

13

をこのシーケンスはUTF-8 byte order mark (BOM)あるので、あなたが最初の行に文字を取得しています。テキストファイルがBOMで始まる場合は、メモ帳などのWindowsプログラムによって生成された可能性があります。

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

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

、バイトシーケンスは、1文字(U + FEFF)にデコードされます。この文字はオプションです。合法的なUTF-8ファイルは、それで始まるかもしれません。

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

そして今、あなたはあなたのコードの残りの部分を続行することができます。だから我々はそれがU + FEFFだ場合にのみ、最初の文字をスキップします。

関連する問題