JavaのOutputStreamWriterを使ってテキストファイルの作成および出力を行います。
FileWriterでもよいのですが、文字コードを指定するのでOutputStreamWriterを使ったサンプルソースを以下に記します。
本サンプルコードの動作ですが、ファイルが既に存在する場合は削除し再作成されます。
以下にサンプルソースを2つ紹介します。
キーボードから文字を入力し、入力した文字列をファイルに出力します。
文字の入力を終了するには、.(dot)のみ入力してEnterキーを押してください。
本サンプルプログラムが終了します。
WriteText1.java UTF-8, LF
import java.lang.Exception;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.InputStreamReader;
import java.io.BufferedReader;
class WriteText1 {
String filename;
private void setFilename(String s) {
this.filename = s;
}
private String getFilename() {
return this.filename;
}
private void usage() {
System.err.println("Usage: java WriteText <output filename>");
System.exit(1);
}
WriteText1(String[] args) {
if (args.length != 1) {
usage();
}
this.setFilename(args[0]);
}
private boolean inputLine(OutputStreamWriter osw) {
boolean ret = true;
try {
System.out.print("> "); // prompt
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String in = br.readLine();
if (in.equals(".")) { ret = false; } // input terminator
else { osw.write(in + System.getProperty("line.separator")); } // output input string
// br.close(); // stdinなので閉じる必要なし・閉じれない(閉じると例外発生)
// isr.close(); // stdinなので閉じる必要なし・閉じれない(閉じると例外発生)
} catch (Exception e) {
e.printStackTrace();
System.exit(2);
}
return ret;
}
private void run() {
String charcode = System.getProperty("file.encoding"); // default character code
try {
FileOutputStream fos = new FileOutputStream(this.getFilename());
OutputStreamWriter osw = new OutputStreamWriter(fos, charcode);
while (inputLine(osw));
osw.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
System.exit(3);
}
}
public static void main(String[] args) {
WriteText1 me = new WriteText1(args);
me.run();
}
}
WriteText2.java UTF-8, LF
import java.lang.Exception;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.PrintWriter;
class WriteText2 {
String filename;
private void setFilename(String s) {
this.filename = s;
}
private String getFilename() {
return this.filename;
}
private void usage() {
System.err.println("Usage: java WriteText <output filename>");
System.exit(1);
}
WriteText2(String[] args) {
if (args.length != 1) {
usage();
}
this.setFilename(args[0]);
}
private boolean inputLine(PrintWriter pw) {
boolean ret = true;
try {
System.out.print("> "); // prompt
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String in = br.readLine();
if (in.equals(".")) { ret = false; } // input terminator
else { pw.println(in); }
// br.close(); // stdinなので閉じる必要なし・閉じれない(閉じると例外発生)
// isr.close(); // stdinなので閉じる必要なし・閉じれない(閉じると例外発生)
} catch (Exception e) {
e.printStackTrace();
System.exit(2);
}
return ret;
}
private void run() {
String charcode = System.getProperty("file.encoding"); // default character code
try {
FileOutputStream fos = new FileOutputStream(this.getFilename());
OutputStreamWriter osw = new OutputStreamWriter(fos, charcode);
PrintWriter pw = new PrintWriter(osw);
while (inputLine(pw));
pw.close();
osw.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
System.exit(3);
}
}
public static void main(String[] args) {
WriteText2 me = new WriteText2(args);
me.run();
}
}
上記のテキストファイル出力サンプルソースをコンパイルして実行してみます。
$ javac WriteText?.java
$ java WriteText1 out1.txt > あいうえお > aiueo > . $ cat out1.txt あいうえお aiueo
$ java WriteText2 out2.txt > kakikukeko > かきくけこ > . $ cat out2.txt kakikukeko かきくけこ
$ ls out*.txt out1.txt out2.txt
以上、Javaでテキストファイルを出力するサンプルソースでした。