如果我有一个类路径上的资源,我可以加载它作为流罚款,甚至有它的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 !...“。