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.
ファイルライタのコンストラクタ
-
- 以下のように日本語で言い換えます:
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();
}
}
}
}
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();
}
}
}
(日本語での一つのオプション)
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ドキュメント