代码之家  ›  专栏  ›  技术社区  ›  Michael Neale

给定一个类路径资源,有没有一种方法可以获取包含它的java.io.file对象?

  •  8
  • Michael Neale  · 技术社区  · 16 年前

    如果我在类路径上有一个资源,我可以将其作为流很好地加载,甚至还有一个它的URL表示。不幸的是,URL的某些实现没有正确实现lastmodified。

    我想要的是获取类路径中某个东西的路径,然后将其解析为它在磁盘上的一个文件——如果它在JAR中,那么指向JAR的文件就可以了。然后,我可以从文件对象而不是url中获取最新修改的内容,这将更有帮助。

    2 回复  |  直到 10 年前
        1
  •  12
  •   Dean Povey    16 年前

    大致来说:

        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。

        2
  •  -1
  •   ZZ Coder    16 年前

    不可以。通常不能这样做,因为URL可以表示与文件无关的资源。例如,它可以是http、ftp或jndi等。

    如果协议是基于文件的,您可以检查协议并自己创建文件,如“file://path”、“jar://path!”……