Javaで改行する方法
Javaで文字列を改行する方法です。
Javaで改行コードを扱うには、いくつかの方法があります。改行コードを直書きする方法、プロパティから取得して利用する方法、BufferedWriter.newLine を利用する方法などです。改行コードは OS に依存します。Linux 上で作られたファイルを Windows 上で読み込んだりするケースもありますから、動作環境に合わせて、きちんと仕様を決めることが大切です。
ここでは Javaで文字列の途中で改行する方法 を紹介します。
改行コードのパターン
テキストの改行を表現する方法は、下記の3パターン存在します。
OS | 改行コード |
---|---|
Windows系OS | rn (CR+LF) |
Unix系OS全般 Mac OS X | n (LF) |
Mac OS 9以前 | r (CR) |
余談ですが HTTP やメールのプロトコルでは、改行コードとして CRLF が定められているようですね。
検証環境
今回は Windows 7、Java 7 で Eclipse 上で検証しています。
改行コードを直書きする方法
一番簡単な方法、改行コードの直書きです。
こんな感じ書きます。
String test1 = "ABCD\nEFG";
System.out.println(test1);
結果はこうなります。
ABCD
EFG
ふむ、簡単ですね。
改行コードをプロパティから取得する方法
次に OS の改行コードを取得して利用する方法です。
こんな感じ書きます。
String lineSepa = System.getProperty("line.separator");
String test2 = "ABCD" + lineSepa + "EFG";
System.out.println(test2);
結果はこうなります。
ABCD
EFG
デバッグすれば \n が入っていることがわかります。
システム間の OS が一致しているのであれば、使える方法ですね。
BufferedWriter.newLineを使用する方法
BufferedWriter クラスの newLine メソッドは、プログラムを実行している OS 環境に合わせて自動で改行コードを判断して出力してくれます。
自動で改行コードを判断ってところが、実は不具合を引き起こす原因だったりします。
上図を翻訳するとこうです。
改行文字を書き込みます。改行文字は、システムの line.separator プロパティにより定義され、必ずしも単一の改行文字 (「¥n」) であるとは限りません。
つまり、上記でも説明した「System.getProperty("line.separator")」を使用しているってことになります。
Linux 上でファイルを作って、Windows で使うとかになった場合、改行コードが不具合を起こす可能性がありますので十分に注意しましょう。
サンプルを作るとすればこんな感じでしょうか。
public static void main(String[] args) {
List<String> list = Arrays.asList("あいうえお","かきくけこ","さしすせそ","たちつてと","なにぬねの");
String path = "C:/test.txt";
String encoding = "Windows-31J";
//String encoding = "EUC-JP";
boolean ret = fileWriter(list, path, encoding);
System.out.println(ret);
}
private static boolean fileWriter(List<String> list, String path, String encoding) {
FileOutputStream fileStream = null;
OutputStreamWriter outWriter = null;
BufferedWriter writer = null;
try {
fileStream = new FileOutputStream(path);
outWriter = new OutputStreamWriter(fileStream, encoding);
writer = new BufferedWriter(outWriter);
for ( int i = 0; i < list.size(); i++ ) {
if ( i > 0 ) writer.newLine();
//if ( i > 0 ) writer.write("n");
String record = list.get(i);
writer.write(record);
}
writer.flush();
} catch ( IOException e ) {
e.printStackTrace();
return false;
} finally {
try {
fileStream.close();
outWriter.close();
writer.close();
} catch ( IOException e ) {
return false;
}
}
return true;
}
newLine メソッドを利用して改行コードを追加しています。"n"にしたい場合は writer.write("n") としてください。
出力されたファイルを確認すると・・・、
おおおー、ちゃんと改行されている―^^
バイナリエディタで見ると改行コードは 0D 0A (CR+LF)となっていました。
Windows 環境で newLine しているので、デフォルト CRLF になります。
まとめ
Javaで文字列の途中で改行する方法を紹介しました。
改行コードは、システム間の連携やファイル作成にはなくてはならない存在です。そのため安易に考えていると、連携テストの際に不具合を発生させたりします。
環境や仕様を十分に検討して、検証もきっちりおこないましょうね。
おつかれさまでした。