FileInputStream, InputStreamReader, BufferedReader を使用して SHIFT_JIS のテキストファイルをすべて読み込んで StringBuilder にデータとして保存してからコンソール画面に出力します。 FileInputStream はファイルのオープンにあたり、ドキュメントではバイトストリームの接続を開くという説明になっています。同様に InputStreamReader は『バイト・ストリームから文字ストリームへの橋渡し』という説明です。なので、このクラスでキャラクタセットを指定します。( 使用可能なキャラクタセットはこちらで確認します ) BufferedReader はその名前の通り行をバッファリングする事が目的となります。なのでメソッドは行に対するアクセスが可能となっています。
01.
package
console_01;
02.
03.
import
java.io.BufferedReader;
04.
import
java.io.FileInputStream;
05.
import
java.io.InputStreamReader;
06.
07.
public
class
Main {
08.
09.
public
static
void
main(String[] args) {
10.
11.
System.out.println(
"SJIS 単純読込"
);
12.
13.
String currentPath;
14.
15.
currentPath = System.getProperty(
"user.dir"
);
16.
17.
System.out.println(currentPath);
18.
19.
String target = String.format(
"%s\\sjis_base.txt"
, currentPath);
20.
// 読み込むファイルのパス
21.
System.out.println(target);
22.
23.
try
{
24.
// 接続を開く( バイトストリーム )
25.
FileInputStream sjis_file =
new
FileInputStream(target);
26.
27.
// バイト・ストリームから文字ストリームへの橋渡し
28.
// https://docs.oracle.com/javase/jp/8/docs/technotes/guides/intl/encoding.doc.html
29.
InputStreamReader charset_stream =
new
InputStreamReader(sjis_file,
"SJIS"
);
30.
31.
// 行をバッファリング
32.
BufferedReader buffer =
new
BufferedReader(charset_stream);
33.
34.
// 一行ぶんの文字列
35.
String line_buffer;
36.
StringBuilder all_string =
new
StringBuilder();
37.
38.
while
(
null
!= (line_buffer = buffer.readLine() ) ) {
39.
// コマンドプロンプトに表示
40.
all_string.append(line_buffer);
41.
all_string.append(
"\r\n"
);
42.
}
43.
44.
// 行バッファを閉じる
45.
buffer.close();
46.
// 文字ストリームを閉じる
47.
charset_stream.close();
48.
// 接続を閉じる
49.
sjis_file.close();
50.
51.
System.out.println(all_string);
52.
53.
54.
}
catch
(Exception e) {
55.
e.printStackTrace();
56.
}
57.
58.
}
59.
60.
}
以下では SHIFT_JIS で読み出したテキストデータを UTF8N のフォーマットで書き出します。メモリとしては行バッファのみを定義しており、変数を使わずに入力用と出力用のオブジェクトを一気に作成して処理しています。
01.
package
console_02;
02.
03.
import
java.io.BufferedReader;
04.
import
java.io.BufferedWriter;
05.
import
java.io.FileInputStream;
06.
import
java.io.FileOutputStream;
07.
import
java.io.InputStreamReader;
08.
import
java.io.OutputStreamWriter;
09.
10.
public
class
Main {
11.
12.
public
static
void
main(String[] args) {
13.
14.
System.out.println(
"SJIS > UTF8N 書込"
);
15.
16.
String currentPath;
17.
18.
currentPath = System.getProperty(
"user.dir"
);
19.
20.
System.out.println(currentPath);
21.
22.
// 読み込むファイルのパス
23.
String target = String.format(
"%s\\sjis_base.txt"
, currentPath);
24.
System.out.println(target);
25.
26.
// 書き込むファイルのパス
27.
String utf8n = String.format(
"%s\\utf8n.txt"
, currentPath);
28.
System.out.println(utf8n);
29.
30.
try
{
31.
// 入力行をバッファリング
32.
BufferedReader buffer =
33.
new
BufferedReader(
34.
new
InputStreamReader(
35.
new
FileInputStream(target),
36.
"SJIS"
37.
)
38.
);
39.
40.
// 出力用バッファリング
41.
BufferedWriter buffer_write =
new
BufferedWriter(
42.
new
OutputStreamWriter(
43.
new
FileOutputStream(utf8n),
44.
"UTF8"
45.
)
46.
);
47.
// ※ UTF8 で UTF8N となるので、UTF8 にするには先頭に BOM を出力する
48.
// fileOutputStream.write( 0xef );
49.
// fileOutputStream.write( 0xbb );
50.
// fileOutputStream.write( 0xbf );
51.
52.
// 一行ぶんの文字列
53.
String line_buffer;
54.
55.
while
(
null
!= (line_buffer = buffer.readLine() ) ) {
56.
// ファイルに出力
57.
buffer_write.write( line_buffer +
"\r\n"
);
58.
}
59.
60.
// バッファを閉じる
61.
buffer_write.close();
62.
buffer.close();
63.
64.
65.
}
catch
(Exception e) {
66.
e.printStackTrace();
67.
}
68.
69.
}
70.
71.
}