2009-10-12 57 views
8

如果我有一個類路徑上的資源,我可以加載它作爲流罰款,甚至有它的URL表示。不幸的是,Url的某些實現不能正確實現lastModified。給定一個類路徑資源,有沒有辦法讓java.io.File對象擁有/包含它?

我想要的是在類路徑中找到某個東西的路徑,然後將其解析爲它在磁盤上的文件 - 如果它在jar中,則指向該jar的文件很好。然後我可以從File對象中獲取lastModified而不是URL,這將會更有幫助。

回答

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」,您可以自行檢查協議並自行創建File !...「。

相關問題