Javaで改行する方法 ホームページ制作 | 墨田区

Javaで改行する方法

LINEで送る
Pocket

Javaで文字列を改行する方法です。
Javaで文字列を改行する方法

Javaで改行コードを扱うには、いくつかの方法があります。改行コードを直書きする方法、プロパティから取得して利用する方法、BufferedWriter.newLine を利用する方法などです。
改行コードは OS に依存します。Linux 上で作られたファイルを Windows 上で読み込んだりするケースもありますから、動作環境に合わせて、きちんと仕様を決めることが大切です。

ここでは Javaで文字列の途中で改行する方法 を紹介します。

改行コードのパターン

テキストの改行を表現する方法は、下記の3パターン存在します。
OS改行コード
Windows系OS\r\n (CR+LF)
Unix系OS全般
Mac OS X
\n (LF)
Mac OS 9以前\r (CR)

余談ですが HTTP やメールのプロトコルでは、改行コードとして CRLF が定められているようですね。
RFC2822(Internet Message Format)

検証環境

今回は Windows 7、Java 7 で Eclipse 上で検証しています。

改行コードを直書きする方法

一番簡単な方法、改行コードの直書きです。

こんな感じ書きます。
String test1 = "ABCD\r\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

デバッグすれば \r\n が入っていることがわかります。
変数に改行コードが入っている

システム間の OS が一致しているのであれば、使える方法ですね。

BufferedWriter.newLineを使用する方法

BufferedWriter クラスの newLine メソッドは、プログラムを実行している OS 環境に合わせて自動で改行コードを判断して出力してくれます。

自動で改行コードを判断ってところが、実は不具合を引き起こす原因だったりします。
BufferedWriter.newLineのJavadoc

上図を翻訳するとこうです。
・改行文字を書き込みます。改行文字は、システムの 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") としてください。

出力されたファイルを確認すると・・・、
BufferedWriter.newLine メソッドを利用して改行コードを追加

おおおー、ちゃんと改行されている―^^

バイナリエディタで見ると改行コードは 0D 0A (CR+LF)となっていました。
バイナリエディタで改行コードを確認

Windows 環境で newLine メソッドを利用しているので、デフォルトで CRLF になります。

まとめ

改行コードは、システム間の連携やファイル作成にはなくてはならない存在です。そのため安易に考えていると、連携テストの際に不具合を発生させたりします。

環境や仕様を十分に検討して、検証もきっちりおこないましょうね。

おつかれさまでした。

LINEで送る
Pocket

この記事がお役に立ちましたら シェア をお願いいたします。

コメントを残す

コメント(必須)

お名前 (必須)
メールアドレス
(アドレスは公開されません)

Trackback URL