Memorandums?

This blog is written about technical-discoveries and daily-events.

クロスプラットフォーム問題

マルチプラットフォームに対応しているJavaであっても、
OSの違いに気をつけなくてはいけない場面があります。

まず、OSを認識するプログラムです。

public String getOS() {
   if (System.getProperty("file.separator").equals("\\"))
      return "WINDOWS";
   else
      return "UNIX";
}

ファイルの区切り文字から認識することができます。

次に、InputStreamReader#readを用いて1文字づつ認識するための方法を紹介します。
1文字づつ認識するにあたっての問題点は、改行コードです。
Windowsでは'\r\n', Unixでは'\n'となっており、これを区別しなければなりません。

#nextLineProcedure

public int nextLineProcedure(String os) throws Exception {
   switch (os) {
   case "WINDOWS":
      if ((data_tmp = in.read()) == '\r')
         return (((data_tmp2 = in.read()) == '\n') ? -1 : -2);
      break;
   case "UNIX":
      if ((data_tmp = in.read()) == '\n')
         return -1;
   break;
   }
   return -3;
}

このメソッドを使い、
-1が返却された場合は、読み込まない。
-3が返却された場合は、data_tmpのみを読み込む。
-2が返却された場合は、data_tmpとdata_tmp2を読みこめばOKです。