Java ファイルの読み書き(文字コードを指定)

Javaのファイルの読み込みと書き込みで文字コードを指定するサンプルです。
InputStreamReaderクラスとOutputStreamWriterクラスを使用します。

確認環境
・Java 8

目次

サンプル 文字コードを指定してファイルを読み込む(InputStreamReader)
  文字コードを指定してファイルに書き込む(OutputStreamWriter)
  指定する文字コード

※注 現在ファイルの読み書きはJava7で追加されたjava.nio.file.Filesが使用されることが多いです。
Java テキストファイルの読み書き(NIO.2のFiles)
以下のサンプルは古い書き方です。

文字コードを指定してファイルを読み込む(InputStreamReader)

文字コードを指定してファイルを読み込むサンプルです。

package test1;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.IOException;

public class Test1 {
    public static void main(String[] args) {
        String dir = "D:\\test3";
        String file1 = "\\test1.txt";
        String charset = "Shift_JIS";
        
        try (
        	FileInputStream fi = new FileInputStream(dir + file1);
        	InputStreamReader is = new InputStreamReader(fi,charset);
                ){
            while (is.ready()) {
            	System.out.println(is.read()); //数値(文字コード)が出力される
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

15行目は、コンストラクタの引数で文字コードを指定しています。
14,15行目は、try-with-resources構文です。リソースを自動でクローズします。
17行目は、ストリームが読込み可能かどうかを判定しています。

以下はJava8 API仕様のInputStreamReaderクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/io/InputStreamReader.html

文字コードを指定してファイルに書き込む(OutputStreamWriter)

文字コードを指定してファイルに書き込むサンプルです。

package test1;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Test1 {
    public static void main(String[] args) {
        String dir = "D:\\test3";
        String file1 = "\\test1.txt";
        String charset = "Shift_JIS";
        List<String> list = new ArrayList<>(Arrays.asList("赤","黄","青"));
        
        try (
        	FileOutputStream fo = new FileOutputStream(dir + file1);
        	OutputStreamWriter ow = new OutputStreamWriter(fo,charset);
        ){
        	for (String a : list) {
        		ow.write(a); //改行なしで書かれる
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

15行目は、コンストラクタの引数で文字コードを指定しています。
14,15行目は、try-with-resources構文です。リソースを自動でクローズします。
21行目は、書き込みを行っています。

以下はJava8 API仕様のOutputStreamWriterクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/io/OutputStreamWriter.html

指定する文字コード

InputStreamReaderとOutputStreamWriterで指定する主な文字コードです。

文字コード 指定する文字コード名称
シフトJIS Shift_JIS
SJIS
UTF8 UTF-8

関連の記事

Java テキストファイルの読み書き(NIO.2のFiles)
Java バイナリファイルの読み込みと書き込み
Java ファイルの読み書き(バッファを使用するクラス)
Java フォルダ/ファイルの一覧を取得(Fileクラス)
Java ドライブの容量と空き容量を取得(Fileクラス)

△上に戻る