FileInputStream, InputStreamReader, BufferedReader を使用して SHIFT_JIS のテキストファイルをすべて読み込んで StringBuilder にデータとして保存してからコンソール画面に出力します。 FileInputStream はファイルのオープンにあたり、ドキュメントではバイトストリームの接続を開くという説明になっています。同様に InputStreamReader は『バイト・ストリームから文字ストリームへの橋渡し』という説明です。なので、このクラスでキャラクタセットを指定します。( 使用可能なキャラクタセットはこちらで確認します ) BufferedReader はその名前の通り行をバッファリングする事が目的となります。なのでメソッドは行に対するアクセスが可能となっています。
package console_01; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; public class Main { public static void main(String[] args) { System.out.println("SJIS 単純読込"); String currentPath; currentPath = System.getProperty("user.dir"); System.out.println(currentPath); String target = String.format("%s\\sjis_base.txt", currentPath); // 読み込むファイルのパス System.out.println(target); try { // 接続を開く( バイトストリーム ) FileInputStream sjis_file = new FileInputStream(target); // バイト・ストリームから文字ストリームへの橋渡し // https://docs.oracle.com/javase/jp/8/docs/technotes/guides/intl/encoding.doc.html InputStreamReader charset_stream = new InputStreamReader(sjis_file, "SJIS"); // 行をバッファリング BufferedReader buffer = new BufferedReader(charset_stream); // 一行ぶんの文字列 String line_buffer; StringBuilder all_string = new StringBuilder(); while ( null != (line_buffer = buffer.readLine() ) ) { // コマンドプロンプトに表示 all_string.append(line_buffer); all_string.append("\r\n"); } // 行バッファを閉じる buffer.close(); // 文字ストリームを閉じる charset_stream.close(); // 接続を閉じる sjis_file.close(); System.out.println(all_string); } catch (Exception e) { e.printStackTrace(); } } }
以下では SHIFT_JIS で読み出したテキストデータを UTF8N のフォーマットで書き出します。メモリとしては行バッファのみを定義しており、変数を使わずに入力用と出力用のオブジェクトを一気に作成して処理しています。
package console_02; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class Main { public static void main(String[] args) { System.out.println("SJIS > UTF8N 書込"); String currentPath; currentPath = System.getProperty("user.dir"); System.out.println(currentPath); // 読み込むファイルのパス String target = String.format("%s\\sjis_base.txt", currentPath); System.out.println(target); // 書き込むファイルのパス String utf8n = String.format("%s\\utf8n.txt", currentPath); System.out.println(utf8n); try { // 入力行をバッファリング BufferedReader buffer = new BufferedReader( new InputStreamReader( new FileInputStream(target), "SJIS" ) ); // 出力用バッファリング BufferedWriter buffer_write = new BufferedWriter( new OutputStreamWriter( new FileOutputStream(utf8n), "UTF8" ) ); // ※ UTF8 で UTF8N となるので、UTF8 にするには先頭に BOM を出力する // fileOutputStream.write( 0xef ); // fileOutputStream.write( 0xbb ); // fileOutputStream.write( 0xbf ); // 一行ぶんの文字列 String line_buffer; while ( null != (line_buffer = buffer.readLine() ) ) { // ファイルに出力 buffer_write.write( line_buffer + "\r\n" ); } // バッファを閉じる buffer_write.close(); buffer.close(); } catch (Exception e) { e.printStackTrace(); } } }