クロスプラットフォーム問題
マルチプラットフォームに対応している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です。