- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2017-07-11T22:32:33+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);~
-1つ目 &ref(WriteText1.java); UTF-8, LF~
1つ目は、FileOutputStream, OutputStreamWriterを使用してテキストをファイルに出力するサンプルソースです。~
OutputStreamWriterのwriteメソッドでは、自動的に改行を付与してくれないので、System.getProperty("line.separator")で、~
デフォルトの改行コードを付け、ファイルに出力しています。
#br
-2つ目 &ref(WriteText2.java);
-2つ目 &ref(WriteText2.java); UTF-8, LF~
2つ目は、さらにPrintWriterを使用し、PrintWriterのprintlnメソッドによりファイルに出力しています。~
printlnなので、改行付きで出力されます。
* サンプルソース1 [#ta09b2a4]
&ref(WriteText.2java); UTF-8, LF
&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でテキストファイルを出力するサンプルソースでした。