EeBlog(テクニカルブログ)

第1回 プラットフォームに依存しない

皆さんは「クロスプラットフォーム」という言葉をご存知でしょうか? 一度(プログラムを)書いたらどのプラットフォーム(OS)でも動くというものです。 これはJavaの最大の利点でもあり、 「Write Once, Run AnyWhere」という言葉で基本理念にもなっています。 ところが、残念なことに「クロスプラットフォーム」はプログラム次第で簡単に崩れてしまいます。 実際、そういったプログラムはよく見かけますし、Javaを通じて争っているMicrosoftもこの点については懐疑的であるとして、 3つのJavaアプリを21のJavaVM(バーチャルマシン)上でテストした結果10個のJavaVMでしか正常に動作しなかったことを報告しています。 しかし、「クロスプラットフォーム」が理想であり、 またJavaはそれを実現でき得る言語であることは間違いではありません。 問題はそうしたプログラミングを行う開発者にあると言えます。

そこで、今回はJavaでもよく利用し、プラットフォームに依存しやすい 「改行文字」と「ファイル区切り文字」についてプラットフォームに依存しない方法を 紹介します。 「改行文字」と「ファイル区切り文字」は どちらもプラットフォームに依存します。 安易に改行を「\n」とするのは間違いです。 「改行文字」や「ファイル区切り文字」といった プラットフォームに依存する情報は システムプロパティを利用します。 システムプロパティはSystemクラスgetPropertyメソッドで 取得できます。

public class SystemPropertyTest {
      public static void main(String[] args) {
          // 改行コードを取得
         String lineSeparator = System.getProperty("line.Separator");
         System.out.println(lineSeparator);
 
         // ファイル区切り文字を取得
         String fileSeparator = System.getProperty("file.Separator");
         System.out.println(fileSeparator);
     }
}

ファイル区切り文字は出力されますが、 改行コードは出力結果が改行されるだけですので注意してください。