Java の基本的なテキストファイルアクセス

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

	}

}





Java

C# : シンプルなテキストファイルの一括入力 / ReadToEnd() : VS2017

ファイル読み込み部分を囲む try ブロックは、編集メニュー > IntelliSense > ブロックの挿入を使用します。

入力ファイルは、プロジェクトのプロパティよりデバッグタブを選択して『コマンドライン引数』のテキストエリアに、エクスプローラで Shift キーを押しながら右クリックで表示される『パスのコピー』で得られるダブルクォーテーションで囲まれたパスを貼り付けます。



🔻 引数よりパスを取得
string[] arguments = Environment.GetCommandLineArgs();
🔻 ローカルウインドウによる表示 🔻 イミディエイトウインドウによる表示 🔻 デバックに必要なウインドウは、デバッグ中に以下の場所から表示させる事ができます using の実装は、赤い波線上で ALT+Enter で候補が表示されます
using System;
using System.IO;
using System.Text;

namespace text_input
{
    class Program
    {
        static void Main(string[] args)
        {
            // 入力ファイルのパス
            string[] arguments = Environment.GetCommandLineArgs();
            // 引数は一つのみ許可
            if (arguments.Length != 2)
            {
                Console.WriteLine("引数を指定して下さい");
                return;
            }

            // 引数から取得
            string FilePath = arguments[1];

            // パスを表示
            Console.WriteLine(FilePath);


            // *********************************
            // 主なエンコード
            // *********************************
            // SHIFT_JIS
            Encoding Enc = Encoding.GetEncoding(932);

            // EUC-JP
            //Encoding Enc = Encoding.GetEncoding(51932);
            // UNICODE 用
            //Encoding Enc = Encoding.GetEncoding(1200);
            // UTF-8N
            //Encoding Enc = new UTF8Encoding();
            // UTF-8
            //Encoding Enc = new UTF8Encoding(true);

            // プロック終了時に開放
            try
            {
                using (StreamReader ReadFile = new StreamReader(FilePath, Enc))
                {
                    // 読込み
                    string Text = ReadFile.ReadToEnd();

                    // 全て読み込んでいるので閉じる
                    ReadFile.Close();

                    Console.WriteLine(Text);
                }

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.ReadLine();

        }
    }
}

Google Chrome のアドレス部分に書き込む簡易エディタ



以下をクリックして選択状態にして、Google Chrome のブックマークバーへドラッグすると、ブックマークレットとしていつでも実行できるようになります。( タイトルは編集で変更してください )
▲ このテキストを Google Chrome のアドレスへ書き込むだけで簡易的なテキストエディタになり、ローカルへ SHIFT_JIS で保存する事ができ、既存のテキスト( SHIFT_JIS と Unicode と UTF8:BOMあり )を読み込む事ができます。

▼ もちろん、通常のWEB ページ上で使用する事もできます

以下が【保存用】のテスト用ソースコードです。( 改行コードが CRLF になるように処理しています )
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.8/FileSaver.min.js"></script>
<script src="https://winofsql.jp/js/encoding.js"></script>
<script src="https://winofsql.jp/js/save-sjis.js"></script>

<script>
$( function(){

	$("#save-action").on("click", function(){

		// テキストエリアのテキストを jQuery で取得		
		var text = $("#save-text").val();
		// lf のみを crlf に変換
		text = text.replace(/\n/g, '\r\n');
		// ローカルに保存する
		save_sjis( "save-sjis.txt", text );
	});

});
</script>
<div><input type="button" id="save-action" value="Save as Shift_JIS"></div>
<textarea id="save-text" style='width:400px;height:100px;'></textarea>


▼ save-sjis.js の内容です
var load_save_file_name = null;

var str2array = function(str) {

	var array = [],i,il=str.length;
	for(i=0;i<il;i++) array.push(str.charCodeAt(i));
	return array;

};

function save_sjis( filename, str ) {

	var array = str2array( str );
	var sjis_array = Encoding.convert(array, "SJIS", "UNICODE");
	var sjis_data = new Uint8Array(sjis_array);

	if ( load_save_file_name != null ) {
		filename = load_save_file_name;
	}

	saveAs(
		new Blob(
			[sjis_data]
			, {type: "text/plain;charset=shift_jis"}
		)
		, filename
	);

}

function load_sjis( event, target ) {

	var file = event.target.files[0];
	load_save_file_name = file.name;

	var reader = new FileReader();
	reader.onload = function(event) {
		target.value = event.target.result;
	};

	reader.readAsText(file,"shift_jis");

}


▼ 読込みのサンプルは以下のようになります
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://winofsql.jp/js/save-sjis.js"></script>

<script>
$( function(){

	$("#get-text").on("change", function( event ){

		load_sjis( event, $("#save-text").get(0) );

	});

});
</script>
<div><input type="file" id="get-text"></div>
<textarea id="save-text" style='width:400px;height:100px;'></textarea>