前回ファイルからの読み込みをしました。今度は書き出しをします。書き出しはPrintStreamというクラスを使います。このクラスは標準出力と同じクラスなのでprintlnメソッドで改行付きで文字列を書き出すことができます。
サンプルの作成
PrintStream stream = new PrintStream("/Users/myaccount/iroha.txt");
PrintStremクラスのインスタンスを作るのは書き出したいファイルの名前をパス付きで引数に渡します。このときファイルは存在しなくても良いのですがディレクトリは存在している場所を指定してください。もし存在しない場合はディレクトリを作れば良いのですがここでは実装はしません。Fileクラスのmkdirメソッドやmkdirsメソッドを使ってください。
上の例はMacですのでWindowsの場合は適宜パスを治してください。
以下では4行ほど書き出した後flushメソッドとcloseメソッドを読んで来ます。flushメソッドはPrintStreamのインスタンスに書き出した文字列を全部送り出すことを命令します。このような書き出しのクラスには処理のスピードを上げるためバッファリングをするものがあります。メソッドを呼ばれただけではすぐに書き出さずある程度ためてから一気に書き出すようにする実装をしているクラスもあります。この場合、後処理でflushをしないと不完全な形で終了してしまうことがあるのです。PrintStreamの実装はバッファリングしないはずですが念のために後処理でflushしてからcloseするようにして置きます。ちなみにflushは「水を流す」という意味があります。水洗トイレを流すときにもflushという動詞が使われます。
import java.io.FileNotFoundException; import java.io.PrintStream; public class FileTest { public static void main(String[] args) throws FileNotFoundException { PrintStream stream = new PrintStream("/Users/myaccount/iroha.txt"); stream.println("いろはにほへと ちりぬるを"); stream.println("わかよなれそ つねならむ"); stream.println("うゐのおくやま けふこえて"); stream.println("あさきゆめみし ゑひもせす"); stream.flush(); stream.close(); } }
実行すると/Users/myaccount/というディレクトリにiroha.txtというファイルができているはずです。これを開くと以下のような内容になっているはずです。
いろはにほへと ちりぬるを わかよなれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす
最後にこの処理をメソッドにして置きます。メソッド名はprintText引数にファイルのパスを文字列で、出力するテキストを文字列の配列で取るようにします。あとの処理は同じです。
import java.io.FileNotFoundException; import java.io.PrintStream; public class FileTest { public void printText(String filePath, String[] text) throws FileNotFoundException{ PrintStream stream = new PrintStream(filePath); for(int i = 0; i < text.length;i++){ stream.println(text[i]); } stream.flush(); stream.close(); } public static void main(String[] args) throws FileNotFoundException { FileTest test = new FileTest(); String[] text = new String[]{ "いろはにほへと ちりぬるを", "わかよなれそ つねならむ", "うゐのおくやま けふこえて", "あさきゆめみし ゑひもせす"}; test.printText("/Users/myaccount/iroha.txt", text); } }