2009-10-12 5 views
8

クラスパス上にリソースがある場合は、ストリームを細かくロードすることもできますし、URL表現さえできます。残念ながら、URLの実装によってはlastModifiedが正しく実装されていません。クラスパスリソースが与えられている場合、java.io.Fileオブジェクトを持っているかそれを含むjava.io.Fileオブジェクトを取得する方法はありますか?

私が望むのは、クラスパス内の何かへのパスを取得し、それをディスク上のファイルに解決することです.JAR内にあれば、jarファイルを指すファイルは問題ありません。 URLの代わりにFileオブジェクトからlastModifiedを取得すると、より便利になります。

答えて

12

大雑把に言えば:

URL url = this.getClass().getResource(myResource); 
    String fileName; 
    if (url.getProtocol().equals("file")) { 
     fileName = url.getFile();   
    } else if (url.getProtocol().equals("jar")) { 
     JarURLConnection jarUrl = (JarURLConnection) url.openConnection(); 
     fileName = jarUrl.getJarFile().getName();    
    } else { 
     throw new IllegalArgumentException("Not a file"); 
    } 
    File file = new File(fileName); 
    long lastModified = file.lastModified(); 

は、あなたが欲しいものを行う必要があります。 IOExceptionをキャッチする必要があります。

-1

いいえURLはファイルに関連付けられていないリソースを表すことができるため、これは一般的ではありません。たとえば、HTTP、FTP、JNDIなどがあります。

プロトコルが「file:// path」、「jar:// path」などのファイルベースの場合は、プロトコルをチェックしてファイルを作成できます!... "。

関連する問題