質問: null; FileInputStream fis= null; ``` ###### 追記2 -問題点 fileはとりあえず読み込めてerrorが発生しないんですけど、表示された文字が文字化けしてます。恐らく文字コードが一致していないからだと思うんです。 -前提 ・eclipseの文字コード >>コンテナーからの継承(l) MS932 -試したことeclipseで文字コードの変更(UTF-8)にしても正しく表示されません。 -分からない 上記で試したこと以外で文字化けを解決する方法があればご教示願います。 ###### #追記3 ・元のテキストファイルの内容は以下です。 ![![イメージ説明![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/fdea4886ff140a57525089b5f1054c4c.png)2a3502ce52dfff585001ae9bdbca.png)説明](9a3c1e7ce6372c9d97e2753879ee9e51.png)](1b46938a6ace287bd519de6a96d9e477.png) ・英語テキストファイルは以下です。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/a9f0b3c588d8cff8772c500706ac60bc.png) ※日本語でのテキストファイの中身は日本人の名前に、英語でのテキストファイには外国人の名前で記載しています どちらにしても、英語で記載した中身か日本語かの違いだけですが。 ・コンソールでは以下の様にテキストファイから読み込まれた文字のみ文字化け ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/b487a3bd662d3b46421433b854271f46.png)
回答: InputStream の代わりに Reader を使った次のコードを試すとどうなりますか? ``` import java.io.*; public class Assignment5 { public static void main(String[]args) { System.out.println("<出現回数>"); File file = new File("C:\\JavaAssignment\\names.txt"); FileReader fr = null; BufferedReader br = null; try { fr = new FileReader(file); br = new BufferedReader(fr); int c; while ((c = br.read()) != -1) System.out.print((char)c); } catch(FileNotFoundException fnfe) { System.out.println("The specified file not found" + fnfe); } catch(IOException ioe) { System.out.println("I/O Exception: " + ioe); } } } ``` **追記** 「安」という漢字の文字コードは次のようになります。 Shit-JIS: 88 c0 (ファイル上のコード) UTF-8: e5 ae 89 (ファイル上のコード) Unicode: 5b89 (Java の char の内部コード) InputStream の read() は 1バイトずつ読み込むので、それを 2バイトの char に キャストすると、0088 00c0 または 00e5 00ae 0089 という文字列になります。 だから文字化けします。 Reader の read() は複数バイトを読み込んで 5b89 という 1文字に変換します。 だから文字化けしません。