如果我有一個類路徑上的資源,我可以加載它作爲流罰款,甚至有它的URL表示。不幸的是,Url的某些實現不能正確實現lastModified。給定一個類路徑資源,有沒有辦法讓java.io.File對象擁有/包含它?
我想要的是在類路徑中找到某個東西的路徑,然後將其解析爲它在磁盤上的文件 - 如果它在jar中,則指向該jar的文件很好。然後我可以從File對象中獲取lastModified而不是URL,這將會更有幫助。
如果我有一個類路徑上的資源,我可以加載它作爲流罰款,甚至有它的URL表示。不幸的是,Url的某些實現不能正確實現lastModified。給定一個類路徑資源,有沒有辦法讓java.io.File對象擁有/包含它?
我想要的是在類路徑中找到某個東西的路徑,然後將其解析爲它在磁盤上的文件 - 如果它在jar中,則指向該jar的文件很好。然後我可以從File對象中獲取lastModified而不是URL,這將會更有幫助。
粗略地說:
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。
不,這通常不能完成,因爲URL可以表示與文件無關的資源。例如,它可以是HTTP,FTP或JNDI等。
如果協議是基於文件的,如「file:// path」,「jar:// path」,您可以自行檢查協議並自行創建File !...「。