2009-10-12 53 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 !...“。

相关问题