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でテキストファイルを出力するサンプルソースでした。