OR
誰でも自由に記事を投稿・編集できるオープンリファレンス
記事ID:624
区分:プログラム  |  分類:Java  |  最終更新日:2014/11/20
クリエイティブ・コモンズ 表示-継承ライセンス 2.1
【Java】テキストをファイルに書き込む
関連タグ:Java, String, FileWriter, BufferedWriter, PrintWriter
このエントリーをはてなブックマークに追加      
本文
履歴
編集
閲覧数: 61,252
Java関連技術まとめ > 【Java】テキストをファイルに書き込む

Java でテキストをファイルに書き込むには、いくつかの方法があります。

 

FileWriterクラスで書き込む

【JDK1.0以降】

ファイル出力の基本クラスとなるのが FileWriter クラスです。

 

■コンストラクタ

コンストラクタ説明
FileWriter(String fileName[, boolean append])

ファイルパス(fileName)からFileWriterオブジェクトを作成します。

ファイルが存在しない場合は、新規にファイルを作成します。

appendがtrueの場合、既存ファイルの最後にデータを追加します。

appendは省略可で、省略した場合はデフォルトfalseとなります。

FileWriter(File file[, boolean append])

FileオブジェクトからFileWriterオブジェクトを作成します。

ファイルが存在しない場合は、新規にファイルを作成します。

appendがtrueの場合、既存ファイルの最後にデータを追加します。

appendは省略可で、省略した場合はデフォルトfalseとなります。

 

■FileWriter主要メソッド

メソッド戻り値説明
write(String str)

void

引数で指定された文字列をストリームに出力します。

改行を指定する場合は任意に改行文字を文字列内に指定します。

※改行文字はOSによって異なります。windows系は「\r\n」、Linux系は「\n」となります。

close()

void

ストリームをフラッシュして閉じます。

※コンストラクタやメソッドの詳細は公式のAPIリファレンスを確認ください。

 

FileWriter クラスでファイルを書き込む場合は、まず、引数に File オブジェクトまたはファイルパス(文字列)を指定してFileWriter オブジェクトを生成し、そのオブジェクトの write メソッドを使用して文字列をファイルに出力します。オブジェクトを生成する際に、第二引数に true(追記フラグ)を指定した場合は、追記モードとなります。また、このクラスは、指定のファイルが存在しない場合は、オブジェクトを生成する際に新規でファイルを作成します。書き込むファイルが存在しない場合でも、エラーとはなりません。ただし、指定ファイルまでのパスが存在しない場合は IOException の例外が発生します。指定パスまでのディレクトリを自動で生成する機能はありません。

※追記モードでもファイルが存在しない場合は新規に作成します。

 

【サンプルコード1】

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

class Sample1 {
    public static void main(String[] args) {

        try{
            //出力先ファイルのFileオブジェクトを作成
            File file = new File("c:\\tmp\\sample.txt");

            //FileWriterオブジェクトを作成(追記モード)
            FileWriter fw = new FileWriter(file, true);

            //文字列を出力
            fw.write("出力文字列1\r\n");
            fw.write("出力文字列2\r\n");

            //FileWriterオブジェクトをクローズ
            fw.close();

        } catch(IOException e) {
            System.out.println(e);
        }
    }
}

※上記例はファイル「c:\tmp\sample.txt」に追記モードで、2行書き込んでいます。windows環境と仮定し、改行文字には「\r\n」を指定しています。

BufferedWriterクラスで書き込む

【JDK1.1以降】

出力文字をバッファリングすることによって、文字列を効率良く書き込むクラスです。

 

■コンストラクタ

クラス説明
BufferedWriter(Writer out)

Writerオブジェクトから文字型出力ストリームを作成します。

 

■BufferedWriter主要メソッド

メソッド戻り値説明
write(String str)

void

引数で指定された文字列をバッファに書き込みます。

newLine()

void

改行文字をバッファに書き込みます。

改行文字は、システムの line.separator プロパティにより定義され文字を使用します。

flush()

void

write()メソッドで書き込まれたバッファをフラッシュします。(ファイルに出力します)

close()

void

ストリームをフラッシュして閉じます。

※コンストラクタやメソッドの詳細は公式のAPIリファレンスを確認ください。

 

通常、Writer(FileWriter や PrintWriterなど)は出力があった場合、ただちにストリームへの書き込みを行いますが、一般的にファイルなどのストリームアクセスは低速なため、Writer から直接、出力メソッドを呼び出す方法は非効率的と言われています。そこで使用されるのが BufferedWriter になります。これは一度、出力をバッファへ書き出し、flush や close メソッドにより、それまで溜めたバッファを一度にストリームへ書き出します。都度、ファイルへアクセスしない分、処理が効率化されます。

 

【サンプルコード2】

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

class Sample2 {
    public static void main(String[] args) {

        try{
            //出力先ファイルのFileオブジェクトを作成
            File file = new File("c:\\tmp\\sample2.txt");

            //BufferedWriterオブジェクトを作成(追記モード)
            //FileWriterオブジェクトをBufferedWriterでラッピングします
            BufferedWriter bw = new BufferedWriter(new FileWriter(file, true));

            //文字列を出力
            bw.write("出力文字列1");
            bw.newLine();
            bw.write("出力文字列2");
            bw.newLine();

            //BufferedWriterオブジェクトをクローズ
            bw.close();

        } catch(IOException e) {
            System.out.println(e);
        }
    }
}

※上記例はファイル「c:\tmp\sample2.txt」に追記モードで、2行書き込んでいます。改行には newLine メソッドを使用しているので、環境を意識せず改行を行えます。

PrintWriterクラスで書き込む

【JDK1.1以降(※オブジェクト生成の際にFile、Stringを引数とする場合はJDK1.5以降)】

オブジェクトの書式付き表現をストリームに出力する便利な Writer クラスです。

 

■コンストラクタ

クラス説明
PrintWriter(OutputStream out)

OutputStreamオブジェクトから文字型出力ストリームを作成します。

PrintWriter(File file)

【JDK1.5以降】fileオブジェクトから文字型出力ストリームを作成します。

PrintWriter(String fileName)

【JDK1.5以降】ファイルパス(fileName)から新規に文字型出力ストリームを作成します。

 

■BufferedWriter主要メソッド

メソッド戻り値説明
write(String str)

void

引数で指定された文字列をバッファに書き込みます。

print(boolean b)

print(char c)

print(char[] s)

print(double d)

print(float f)

print(int i)

print(long l)

print(Object obj)

print(String str)

void

引数で指定された値(boolean型、文字、文字の配列、倍精度浮動小数点数、浮動小数点数、整数、long整数、オブジェクト、文字列)を出力します。

改行文字は自動付加されません。

println(boolean b)

println(char c)

println(char[] s)

println(double d)

println(float f)

println(int i)

println(long l)

println(Object obj)

println(String str)

void

引数で指定された値(boolean型、文字、文字の配列、倍精度浮動小数点数、浮動小数点数、整数、long整数、オブジェクト、文字列)を出力します。

改行文字は自動付加されます。

改行文字は、システムの line.separator プロパティにより定義され文字を使用します。

close()

void

ストリームをフラッシュして閉じます。

※コンストラクタやメソッドの詳細は公式のAPIリファレンスを確認ください。

 

PrintWriter クラスは基本的な機能は FileWriter などの他の writer クラスと変わりませんが、出力の際に便利な print メソッドと println メソッドを実装しています。この二つのメソッドは文字列だけでなく色々なデータ型を引数として受け取り、文字列として出力する機能をもっています。print と println メソッドの違いは、出力の最後に自動で改行文字を付加するかどうかになります。なお、PrintWriter の出力メソッドは、FileWriter 同様、実行と同時に直ちにストリームへ出力するため、一般的にはBufferedWriter でラップし、バッファリングすることが推奨されます。

 

【サンプルコード3】

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

class Sample3 {
    public static void main(String[] args) {

        try{
            //出力先ファイルのFileオブジェクトを作成
            File file = new File("c:\\tmp\\sample3.txt");

            //PrintWriterオブジェクトを作成(追記モード)
            //FileWriterオブジェクトをBufferedWriterでラッピングし、
            //PrintWriterのファイルへの出力をバッファリングします
            PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file, true)));

            //文字列を出力
            pw.println("出力文字列1");
            pw.println("出力文字列2");

            //PrintWriterオブジェクトをクローズ
            pw.close();

        } catch(IOException e) {
            System.out.println(e);
        }
    }
}

※上記例はファイル「c:\tmp\sample3.txt」に追記モードで、2行書き込んでいます。println メソッドを使用している為、改行文字は自動で付加されます。

関連記事
関連記事はありません。
外部リンク
外部リンクはありません。
- 記事検索 -