#author("2017-07-12T17:15:52+09:00","","")
#author("2017-07-12T17:18:51+09:00","","")
#navi(../)
* テキストファイルを追記モード開き文字列を追加する [#bdc3cc87]
テキストファイルが存在する場合は、そのテキストファイルの末尾に入力した文字を追記し、~
存在しない場合は、新規にファイルを作成し、入力したテキストを出力するサンプルソースになります。~

* 関連記事 [#cbe2f795]
-[[テキストファイルの読み込みサンプル>ファイル操作/テキストファイルの読み込み]]
-[[テキストファイルの出力>ファイル操作/テキストファイルの出力]]
//-[[ファイルを追記モード開き文字列を追加する>ファイル操作/ファイルを追記モード開き文字列を追加する]]
-[[CSV取込みサンプルを作ってみた>ファイル操作/CSV取込みサンプルを作ってみた]]

* テキストをファイルに追記するサンプルコード [#e43aa35d]
本サンプルソースは、以下の記事とほとんど一緒です。
-[[テキストファイル作成および出力>ファイル操作/テキストファイルの出力]]
上行のリンクと異なる箇所(重要な箇所)は、以下の行になります。
 FileOutputStream fos = new FileOutputStream(this.getFilename(), true)
FileOutputStreamの2番目の引数にtrueを指定しています。~
2番目の引数はappendを意味し、trueを指定することにより追記書き込みとなります。~
-[[クラス FileOutputStream>https://docs.oracle.com/javase/jp/6/api/java/io/FileOutputStream.html#FileOutputStream(java.io.File,%20boolean)]]
[[参考記事:クラス FileOutputStream>https://docs.oracle.com/javase/jp/6/api/java/io/FileOutputStream.html#FileOutputStream(java.io.File,%20boolean)]]

#ref(AddText.java)

** サンプルプログラムの操作について [#jf55a56a]
キーボードから文字を入力し、入力した文字列をファイルに出力します。~
文字の入力を終了するには、.(dot)のみ入力してEnterキーを押してください。~
本サンプルプログラムが終了します。~

** サンプルソース [#d83be623]
&ref(AddText.java); UTF-8, LF
 import java.lang.Exception;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.OutputStreamWriter;
 import java.io.InputStreamReader;
 import java.io.BufferedReader;
 
 class AddText {
 
     String filename;
 
     private void setFilename(String s) {
         this.filename = s;
     }
 
     private String getFilename() {
         return this.filename;
     }
 
     private void usage() {
         System.err.println("Usage: java AddText <add filename>");
         System.exit(1);
     }
 
     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(), true); // append is true
             OutputStreamWriter osw = new OutputStreamWriter(fos, charcode);
             while (inputLine(osw));
             osw.close();
             fos.close();
         } catch (Exception e) {
             e.printStackTrace();
             System.exit(3);
         }
     }
 
     AddText(String[] args) {
         if (args.length != 1) {
             usage();
         }
         this.setFilename(args[0]);
     }
 
     public static void main(String[] args) {
         AddText me = new AddText(args);
         me.run();
     }
 }

* 実行結果 [#d597225f]
コンパイルして実行します。~
本プログラムは、出力するファイルを引数として渡す必要があります。

+ コンパイル
 $ javac AddText.java
#br
+ 引数なしで実行した場合、使い方(Usage)が表示されます。
 $ java AddText
 Usage: java AddText <add filename>
#br
+ 出力ファイルをadd.txtとして実行します。
+ファイルがないことを確認。
 $ ls -l add.txt
 ls: 'add.txt' にアクセスできません: No such file or directory
#br
+ 文字を入力しファイルに出力されていることを確認。
 $ java AddText add.txt
 > 1
 > 2
 > 3
 > .
 
 $ cat add.txt
 1
 2
 3
#br
+再実行しファイルに追記されていることを確認。
 $ java AddText add.txt
 > 111
 > 222
 > 333
 > .
 
 $ cat add.txt
 1
 2
 3
 111
 222
 333
追記されているのが確認できます。

以上、Javaでファイルにテキストを追記するサンプルソースでした。



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS