自分(.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()で復号化してあげるとなお良い.