2012年2月1日水曜日

java : 実行ファイルのディレクトリ

実行ファイルのディレクトリってC#(.net framework)なら

FileInfo fileInfo = new FileInfo(Environment.GetCommandLineArgs()[0]);
string dir = fileInfo.Directory.FullName;

で簡単に取れますよね。

javaだと「OSの違い」とか「jarパッケージかclassか」とかでもう少し長いコードが必要なようです。

public class Util
{
    public static String getClassDir(Class appClass)
    {
        String className = appClass.getSimpleName() + ".class";
        String path = appClass.getResource(className).getFile();

        int jarIndex = path.toLowerCase().indexOf(".jar!/");
        if(0 <= jarIndex)
            path = path.substring(0, jarIndex);

        path = path.substring(0, path.lastIndexOf('/') + 1);

        if(path.startsWith("file:"))
            path = path.substring("file:".length() );

        if (path.matches("^/[a-zA-Z]:/.*"))
            path = path.substring(1);

        return path;
    }
}

使い方は、

String dir = Util.getClassDir(Test.class);

のようにして「型名.class」の引数を渡して呼びます。 ちなみに標準apiのクラスを引数にするとjreのディレクトリが帰ります。

注) 私のPC(windows7)でしか動作確認していません。