#author("2017-07-11T22:35:19+09:00","","") #author("2017-07-12T17:17:06+09:00","","") #navi(../) * テキストファイルの出力 [#k3131e76] JavaのOutputStreamWriterを使ってテキストファイルの作成および出力を行います。~ FileWriterでもよいのですが、文字コードを指定するのでOutputStreamWriterを使ったサンプルソースを以下に記します。 #contents *関連記事 [#b3e380b4] -[[テキストファイルの読み込みサンプル>ファイル操作/テキストファイルの読み込み]] //-[[テキストファイルの出力>ファイル操作/テキストファイルの出力]] -[[ファイルを追記モード開き文字列を追加する>ファイル操作/ファイルを追記モード開き文字列を追加する]] -[[CSV取込みサンプルを作ってみた>ファイル操作/CSV取込みサンプルを作ってみた]] * テキストファイル作成および出力のサンプルコード [#nb2e2566] 本サンプルコードの動作ですが、ファイルが既に存在する場合は削除し再作成されます。 以下にサンプルソースを2つ紹介します。~ ** サンプルプログラムの操作について [#o913cfe3] キーボードから文字を入力し、入力した文字列をファイルに出力します。~ 文字の入力を終了するには、.(dot)のみ入力してEnterキーを押してください。~ 本サンプルプログラムが終了します。 ** 紹介する2つのサンプルソース [#p4a41bbb] -1つ目 &ref(WriteText1.java); UTF-8, LF~ 1つ目は、FileOutputStream, OutputStreamWriterを使用してテキストをファイルに出力するサンプルソースです。~ OutputStreamWriterのwriteメソッドでは、自動的に改行を付与してくれないので、System.getProperty("line.separator")で、~ デフォルトの改行コードを付け、ファイルに出力しています。 #br -2つ目 &ref(WriteText2.java); UTF-8, LF~ 2つ目は、さらにPrintWriterを使用し、PrintWriterのprintlnメソッドによりファイルに出力しています。~ printlnなので、改行付きで出力されます。 * サンプルソース1 [#ta09b2a4] &ref(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(); } } * サンプルソース2 [#pe883049] &ref(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(); } } * 実行結果 [#i411d201] 上記のテキストファイル出力サンプルソースをコンパイルして実行してみます。 $ 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でテキストファイルを出力するサンプルソースでした。