自分(.class)がどこにいるか調べるサンプルコード

意外と簡単で,こんなの.

public class Test {
    public static void main(String[] args) {
        Test t = new Test();
        t.doIt(Test.class.getName());
    }

    public void doIt(String fqcn) {
        String resourcePath = fqcn.replace('.', '/') + ".class";
        URL url = getClassLoader().getResource(resourcePath);
        String s = url.toExternalForm();
        System.out.println("Test.doIt>" + s);
    }

    private ClassLoader getClassLoader() {
        return Thread.currentThread().getContextClassLoader();
    }
}

warファイルのclassesフォルダに置いてあると

file:/C:/tomcat/webapps/test/WEB-INF/classes/com/example/Test.class

warファイルのlibフォルダにtest.jarとして置いてあると

jar:file:/C:/tomcat/webapps/test/WEB-INF/lib/test.jar!/com/example/Test.class

みたいに取れる(Tomcatの場合ね).
自分がどこにいるか分かってしまえば,あとは好きにし放題.:-D
#思ったことが思ったとおりにできると,たいへんウレシイ.


(追記)URL#toExternalForm()で得られる文字列は符号化されているので,パスにスペースとか含んでいるとNGなので,URLDecoder#decode()で復号化してあげるとなお良い.