Java FileWriter の例

Java FileWriterは、ファイルに文字データを書き込むためのクラスです。

  • Java FileWriter class is a part of java.io package.
  • FileWriter is a sub class of java.io.OutputStreamWriter class.
  • FileWriter is meant for writing streams of characters.
  • FileWriter is used to write to character files. Its write() methods allow you to write character(s) or strings to a file.
  • FileWriters are usually wrapped by higher-level Writer objects, such as BufferedWriter or PrintWriter, which provide better performance and higher-level, more flexible methods to write data.
Java FileWriter

ファイルライタのコンストラクタ

    1. 以下のように日本語で言い換えます:

FileWriter(File file): 指定されたFileオブジェクトを使用してFileWriterオブジェクトを作成します。ファイルが存在し、通常のファイルではなくディレクトリである場合、存在しない場合で作成できず、または他の理由で開けない場合にはIOExceptionが発生します。
FileWriter(File file, boolean append): 指定されたFileオブジェクトを使用してFileWriterオブジェクトを作成します。2番目の引数がtrueの場合、バイトはファイルの先頭ではなく末尾に書き込まれます。ファイルが存在し、通常のファイルではなくディレクトリである場合、存在しない場合で作成できず、または他の理由で開けない場合にはIOExceptionが発生します。
FileWriter(FileDescriptor fd): 指定されたファイルディスクリプタに関連付けられたFileWriterオブジェクトを作成します。
FileWriter(String fileName): 指定されたfileNameを使用してFileWriterオブジェクトを作成します。ファイルが存在し、通常のファイルではなくディレクトリである場合、存在しない場合で作成できず、または他の理由で開けない場合にはIOExceptionが発生します。
FileWriter(String fileName, boolean append): 指定されたfileNameを使用してFileWriterオブジェクトを作成します。2番目の引数はデータの書き込み時に追加するかどうかを示すブール値です。2番目の引数がtrueの場合、データはファイルの先頭ではなく末尾に書き込まれます。ファイルが存在し、通常のファイルではなくディレクトリである場合、存在しない場合で作成できず、または他の理由で開けない場合にはIOExceptionが発生します。

JavaのFileWriterの例

FileWriterは、java.io.OutputStreamWriterクラスとjava.io.Writerクラスのメソッドを継承しています。以下のメソッドを例とともに見てみましょう。

書く(文字 c)

この方法は、int cで指定された単一の文字を書き込みます。

package com.scdev.io.filewriter;

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

/**
 * Java write file using FileWriter write method
 * 
 * @author scdev
 *
 */
public class FileWriterWriteIntExample {

	public static void main(String[] args) {
		FileWriter fileWriter = null;
		try {
			fileWriter = new FileWriter("D:/data/file.txt");
			//inherited method from java.io.OutputStreamWriter 
			fileWriter.write(65);
			fileWriter.write(66);
			fileWriter.write(67);
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if (fileWriter != null) {
					fileWriter.flush();
					fileWriter.close();					
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
Java FileWriter Example
package com.scdev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write method using try with resource
 * 
 * @author scdev
 *
 */
public class FileWriterWriteIntTryWithResource {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//inherited method from java.io.OutputStreamWriter 
			fileWriter.write(65);
			fileWriter.write(66);
			fileWriter.write(67);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

注意:上記のプログラムのfileWriter.write(65)は、65が文字Aの10進数値であるため、ファイルにAが書き込まれます。つまり、整数の65は文字Aに変換され、その他の場合も同様です。

write(String str, int off, int len) を日本語で自然に言い換えると:
ストリング str を off から len 文字分書き込む。

この方法は、String strのint offからint lenまでの一部を書き込みます。

  • str: String to be written
  • off: Offset from which to start reading characters
  • len: Number of characters to be written

もしlenパラメーターの値が負の場合、文字は書き込まれません。

package com.scdev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(String  s,  int  off,  int  len) method
 * 
 * @author scdev
 *
 */
public class FileWriterWriteStringExample {

	public static void main(String[] args) {
		String data = "This is FileWriter Example.";
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//inherited method from java.io.OutputStreamWriter 
			fileWriter.write(data, 8, 10);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
FileWriter write example

(日本語での一つのオプション)
write(char[] cbuf, int off, int len)を書いてください。

この方法は、char [] cbuf で指定された文字配列の一部を int off から int len まで書き込みます。

  • cbuf: A character array
  • off: Offset from which to start reading characters
  • len : Number of characters to write
package com.scdev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(char[] cbuf,  int  off,  int  len) method
 * 
 * @author scdev
 *
 */
public class FileWriterWriteCharArray {

	public static void main(String[] args) {
		char[] data = "This is FileWriter Example.".toCharArray();
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//inherited method from java.io.OutputStreamWriter 
			fileWriter.write(data, 8, 10);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

書く(char[] cbuf)

この方法は、cbufで指定された文字の配列を書き込みます。

package com.scdev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(char[] cbuf) method
 * 
 * @author scdev
 *
 */
public class FileWriterWriteCharArrayExample {

	public static void main(String[] args) {
		char[] data = "This is FileWriter Example.".toCharArray();
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//inherited method from java.io.Writer 
			fileWriter.write(data);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

書く(String str)

この方法は、strで指定されたファイルに文字列の値を書き込みます。

package com.scdev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(String  str) method
 * 
 * @author scdev
 *
 */
public class FileWriterWriteString {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//inherited method from java.io.Writer 
			fileWriter.write("JournalDev");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

引数として与えられた文字 c を追加する。

このメソッドは、指定された文字(16ビット文字)をこのライターに追加する方法です。

package com.scdev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter append(char c) method
 * 
 * @author scdev
 *
 */
public class FileWriterAppendCharacter {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//inherited method from java.io.Writer 
			fileWriter.write("JournalDev");
			fileWriter.append('C');
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

フラッシュする

このメソッドはストリームをフラッシュします。flush()メソッドが呼び出されると、データはすぐに出力ファイルに書き込まれます。

package com.scdev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file with FileWriter flush() method
 * 
 * @author scdev
 *
 */
public class FileWriterFlushExample {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//inherited method from java.io.Writer 
			fileWriter.write("JournalDev");
			//inherited method from java.io.OutputStreamWriter
			fileWriter.flush();
			
			fileWriter.write(" Tutorials");
			fileWriter.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

閉じる

この方法では、クローズする前にストリームをフラッシュします。一度ストリームがクローズされると、write()メソッドやflush()メソッドを呼び出すとIOExceptionがスローされます。既にクローズされたストリームを再度クローズしても効果はありません。

package com.scdev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file with FileWriter close() method
 * 
 * @author scdev
 *
 */
public class FileWriterCloseExample {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//inherited method from java.io.Writer 
			fileWriter.write("JournalDev");
			//inherited method from java.io.OutputStreamWriter
			fileWriter.close();;
			
			fileWriter.write(" Tutorials");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

出力:

java.io.IOException: Stream closed
	at sun.nio.cs.StreamEncoder.ensureOpen(Unknown Source)
	at sun.nio.cs.StreamEncoder.write(Unknown Source)
	at sun.nio.cs.StreamEncoder.write(Unknown Source)
	at java.io.OutputStreamWriter.write(Unknown Source)
	at java.io.Writer.write(Unknown Source)
	at com.scdev.examples.FileWriterCloseExample.main(FileWriterCloseExample.java:20)

FileWriterとFileOutputStreamの比較

  • FileWriter is meant for writing streams of characters while FileOutputStream is used for writing streams of raw bytes.
  • FileWriter deal with 16-bit characters while FileOutputStream deals with 8-bit bytes.
  • FileWriter can handle Unicode strings while FileOutputStream writes bytes to a file and do not accepts characters or strings hence it needs to wrapped up by OutputStreamWriter to accept strings.

また、Javaでファイルを書き込む方法については、Javaファイルの書き込みをチェックしてください。以上がJava FileWriterに関する情報です。何か重要な情報が漏れていないことを願っています。

私たちのGitHubリポジトリから、すべてのサンプルコードをダウンロードすることができます。

参照: APIドキュメント

コメントを残す 0

Your email address will not be published. Required fields are marked *