Java 文字コードを指定したファイルの読み込みと書き込み(InputStreamReaderとOutputStreamWriter)

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

目次

InputStreamReaderクラス

  • 文字コードを指定してファイルを読み込むことができます。
    →FileReaderクラスでは文字コードを指定できません。

InputStreamReaderクラスのコンストラクタ

public InputStreamReader(InputStream in,String charsetName)
throws UnsupportedEncodingException
  • 2つめの引数で文字コードを指定します。

InputStreamReaderクラスのnewLine()メソッド

public void newLine() throws IOException

 

OutputStreamWriterクラス

  • 文字コードを指定してファイルに書き出すことができます。
    →FileWriterクラスでは文字コードを指定できません。

OutputStreamWriterクラスのコンストラクタ

public OutputStreamWriter(OutputStream out,String charsetName)
throws UnsupportedEncodingException
  • 2つめの引数で文字コードを指定します。

OutputStreamWriterクラスのwrite(int c)メソッド

public void write(int c) throws IOException

 

コード

サンプルのコードです。
指定したフォルダ配下のtest1.txtを読み込み、その内容をtest2.txtに書き出しています。

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

package test1;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;

public class Test1 {
    public static void main(String[] args) {
        
        String dir = "D:\\workspace123abc";
        String filename1 = "\\test1.txt";
        String filename2 = "\\test2.txt";
        String charset = "Shift_JIS";
        
        // try-with-resources構文
        try (InputStreamReader reader = new InputStreamReader(
                new FileInputStream(dir + filename1),charset);
            OutputStreamWriter writer = new OutputStreamWriter(
                new FileOutputStream(dir + filename2),charset)){ 
            
            // 読み込みと書き込み
            int data;
            // readメソッドは終わりに達した場合、-1を返す
            while ((data = reader.read()) != -1) {
                writer.write(data);
//              System.out.println((char)data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

文字コード

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

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

 

バッファ処理

通常はバッファ処理が使えるBufferedReaderクラスとBufferedWriterクラスも使用します。
使用方法は以下を参照願います。
Java バッファを利用したファイルの読み込みと書き込み(BufferedReaderとBufferedWriter)

関連の記事

Java リソースを自動でクローズする(try-with-resources文)
Java テキストファイルの読み書きのサンプル(Filesクラス)
Java バイナリファイルの読み込みと書き込み(FileInputStreamとFileOutputStream)
Java バッファを利用したファイルの読み込みと書き込み(BufferedReaderとBufferedWriter)
Java フォルダ内のファイルの一覧を取得するサンプル(Fileクラス)
Java ドライブの容量と空き容量を取得するサンプル(Fileクラス)

プログラムでつまったらteratailに登録して質問しましょう!↓↓↓

△上に戻る