Java FileWriter
- Java FileWriterクラスは、
java.io
パッケージの一部です。 - FileWriterは、
java.io.OutputStreamWriter
クラスのサブクラスです。 - FileWriterは、文字のストリームを書き込むために使用されます。
- FileWriterは、文字ファイルに書き込むために使用されます。その
write()
メソッドは、文字または文字列をファイルに書き込むことができます。 - 通常、FileWriterは、BufferedWriterや
PrintWriter
などの上位レベルのWriterオブジェクトによってラップされ、より高性能で柔軟なメソッドを提供します。
FileWriterのコンストラクタ
FileWriter(File file)
: 指定されたFileオブジェクトを使用してFileWriter
オブジェクトを作成します。ファイルが存在しているが通常のファイルではなくディレクトリである場合、存在しないが作成できない場合、またはその他の理由で開けない場合には、IOException
がスローされます。FileWriter(File file, boolean append)
: 指定されたFileオブジェクトを使用してFileWriterオブジェクトを作成します。第2引数がtrueの場合、バイトはファイルの先頭ではなく末尾に書き込まれます。ファイルが存在しているが通常のファイルではなくディレクトリであるか、存在していないが作成できないか、または他の理由で開くことができない場合、IOExceptionがスローされます。FileWriter(FileDescriptor fd)
: 指定されたファイルディスクリプタに関連付けられたFileWriterオブジェクトを作成します。FileWriter(String fileName)
: 指定されたファイル名を使用してFileWriterオブジェクトを作成します。IOException
がスローされます。指定した名前のファイルが存在しているが通常のファイルではなくディレクトリであるか、存在していないが作成できないか、または他の理由で開くことができない場合。FileWriter(String fileName, boolean append)
: 指定されたファイル名を使用してFileWriterオブジェクトを作成します。書き込まれたデータを追加するかどうかを示すブール値も指定します。第2引数がtrueの場合、データはファイルの先頭ではなく末尾に書き込まれます。指定した名前のファイルが存在しているが通常のファイルではなくディレクトリであるか、存在していないが作成できないか、または他の理由で開くことができない場合、IOExceptionがスローされます。
Java FileWriterの例
FileWriterは、java.io.OutputStreamWriter
クラスとjava.io.Writer
クラスのメソッドを継承しています。以下のメソッドと例を見てみましょう。
write(int c)
このメソッドは、int cで指定された単一の文字を書き込みます。
package com.journaldev.io.filewriter;
import java.io.FileWriter;
import java.io.IOException;
/**
* Java write file using FileWriter write method
*
* @author pankaj
*
*/
public class FileWriterWriteIntExample {
public static void main(String[] args) {
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter("D:/data/file.txt");
// 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();
}
}
}
}
FileWriterは
AutoCloseable
インターフェースを実装しているため、FileWriterクラスを使用する際にはtry with resourcesを使用することができます。
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write method using try with resource
*
* @author pankaj
*
*/
public class FileWriterWriteIntTryWithResource {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// java.io.OutputStreamWriterから継承されたメソッド
fileWriter.write(65);
fileWriter.write(66);
fileWriter.write(67);
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意: 上記のプログラムでは、fileWriter.write(65)
はAをファイルに書き込みます。というのも、65は文字Aの10進数の値であり、そのため整数65は文字Aに変換されるからです。他の文字についても同様です。
write(String str, int off, int len)
このメソッドは、String str
の一部をoff
からlen
まで書き込みます。
- str: 書き込む文字列
- off: 文字の読み取りを開始するオフセット位置
- len:書き込む文字の数
もしlenパラメータの値が負数であれば、文字は書き込まれません。
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write(String s, int off, int len) method
*
* @author pankaj
*
*/
public class FileWriterWriteStringExample {
public static void main(String[] args) {
String data = "This is FileWriter Example.";
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
//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:文字配列
- off:文字の読み取りを開始するオフセット
- len:書き込む文字の数
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write(char[] cbuf, int off, int len) method
*
* @author pankaj
*
*/
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")) {
//java.io.OutputStreamWriterから継承されたメソッド
fileWriter.write(data, 8, 10);
} catch (Exception e) {
e.printStackTrace();
}
}
}
write(char[] cbuf)
このメソッドは、cbufで指定された文字配列を書き込みます。
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write(char[] cbuf) method
*
* @author pankaj
*
*/
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")) {
//java.io.Writerから継承されたメソッド
fileWriter.write(data);
} catch (Exception e) {
e.printStackTrace();
}
}
}
write(String str)
このメソッドは、strで指定された文字列をファイルに書き込みます。
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write(String str) method
*
* @author pankaj
*
*/
public class FileWriterWriteString {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
//java.io.Writerから継承されたメソッド
fileWriter.write("JournalDev");
} catch (Exception e) {
e.printStackTrace();
}
}
}
append(char c)
このメソッドは、指定された文字をこのライターに追加します。ここで
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter append(char c) method
*
* @author pankaj
*
*/
public class FileWriterAppendCharacter {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// java.io.Writerから継承したメソッド
fileWriter.write("JournalDev");
fileWriter.append('C');
} catch (Exception e) {
e.printStackTrace();
}
}
}
flush()
このメソッドはストリームをフラッシュします。 flush()
メソッドが呼び出されると、データがすぐに出力ファイルに書き込まれます。
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file with FileWriter flush() method
*
* @author pankaj
*
*/
public class FileWriterFlushExample {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// java.io.Writerから継承したメソッド
fileWriter.write("JournalDev");
// java.io.OutputStreamWriterから継承したメソッド
fileWriter.flush();
fileWriter.write(" Tutorials");
fileWriter.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}
close()
このメソッドは、ストリームをクローズする前にストリームをフラッシュします。ストリームが閉じられた後、write()
メソッドまたはflush()
メソッドを呼び出すと、IOException
がスローされます。以前に閉じられたストリームを閉じることは効果がありません。
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file with FileWriter close() method
*
* @author pankaj
*
*/
public class FileWriterCloseExample {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// java.io.Writerから継承したメソッド
fileWriter.write("JournalDev");
// 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.journaldev.examples.FileWriterCloseExample.main(FileWriterCloseExample.java:20)
FileWriter vs FileOutputStream
- FileWriterは文字のストリームを書き込むために使用され、FileOutputStreamは生のバイトのストリームを書き込むために使用されます。
- FileWriterは16ビットの文字を扱い、FileOutputStreamは8ビットのバイトを扱います。
- FileWriterはUnicodeの文字列を処理できますが、FileOutputStreamは文字や文字列を受け付けないため、
OutputStreamWriter
でラップする必要があります。
また、Javaでファイルを書き込む方法については、java write fileを参照してください。これでJava FileWriterに関する重要な情報が抜けていないことを願っています。
すべての例のコードはGitHubリポジトリからダウンロードできます。
参考:APIドキュメント
Source:
https://www.digitalocean.com/community/tutorials/java-filewriter-example