【问题标题】:Getting absolute path of a file loaded via classpath获取通过类路径加载的文件的绝对路径
【发布时间】:2011-12-29 12:42:32
【问题描述】:

我有这个非常特殊的需求,其中一个文件是从类路径加载的,并且在另一个需要它的绝对路径的模块中使用相同的文件。通过类路径加载的文件的绝对路径有哪些可能的推导方式?

【问题讨论】:

    标签: java


    【解决方案1】:

    使用 ClassLoader.getResource() 而不是 ClassLoader.getResourceAsStream() 来获取 URL。根据定义,它将永远是绝对的。

    然后您可以在 URL 上使用openConnection() 来加载内容。我经常使用这个代码:

    public ... loadResource(String resource) {
        URL url = getClass().getClassLoader().getResource(resource);
        if (url == null) {
            throw new IllegalArgumentException("Unable to find " + resource + " on classpath);
        }
    
        log.debug("Loading {}", url); // Will print a file: or jar:file: URL with absolute path
        try(InputStream in = resource.openConnection()) {
            ...
        }
    }
    

    【讨论】:

    • 尽管对于大多数 java 开发人员来说,这个答案对于某些人来说是显而易见的,但 getResource() 方法是哪个类并不是那么明显,应该考虑添加它或指向 javadoc,正如它在这个如果您使用类或类加载器中的 getResource() 进行评论,它的行为可能会有所不同:stackoverflow.com/questions/2593154/…
    • 需要一个更好的例子
    【解决方案2】:

    使用

    classLoader.getResource("/path/in/classpath").getFile();

    另见

    【讨论】:

    • 你能解释更多而不是给出链接,因为它不起作用'classLoader.getResource("/path/in/classpath").getFile();'
    • 链接仍然有效。但是我更新到最新的稳定版本docs.oracle.com/javase/8/docs/api/java/lang/…
    • 你需要:SomeClassOfYours.getClass().getClassLoader().getResource
    猜你喜欢
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2019-12-17
    相关资源
    最近更新 更多