2

只是想知道哪种方法是读取可能位于类路径中的文件的最佳方式。

我唯一拥有的是文件路径的属性。举个例子:

  • 文件路径=类路径:com/mycompany/myfile.txt
  • 文件路径=文件:/myfolder/myfile.txt

从该属性加载 InputStream 的最佳方式是什么?

4

4 回答 4

3

您可以使用URL方法 openStream,它会返回一个 InputStream,您可以使用它来读取您的文件。该 URL 将适用于 JAR 内部和外部的文件。请注意使用有效的 URL。

于 2012-09-13T15:17:57.080 回答
3

您必须手动检测它。完成此操作后,以输入流的形式从类路径获取资源:

class Example {
    void foo() {
        try (InputStream in = Example.class.getResourceAsStream("/config.cfg")) {
            // use here. It'll be null if not found.
        }
    }
}

Example.class注意:没有前导斜杠,它相对于包含您的文件的同一目录(如果需要,在 jar 内) 。使用前导斜杠,它是相对于类路径的根目录(jar 的根目录、'bin' 目录的根目录等)。

自然,没有办法获得输出流;通常,类路径中的大多数条目都是不可写的。

于 2020-11-10T13:13:07.293 回答
1

好吧,我只需使用这些String方法startsWith(String sequence)并检查它是否以类路径文件路径开头,然后从那里调用适当的方法来完成工作:

String str=//extracted property tag
if(str.startsWith("filepath")) {
 //simply intialize as URL and get inputstream from that
 URL url =new URL(str);
 URLConnection uc = url.openConnection(); 
 InputStream is=uc.getInputStream();
} else if(str.startsWith("classpath")) {
//strip the classpath  and then call method to extract from jar
}

请参阅此处以从 jar 中提取资源。

于 2012-09-13T15:16:46.180 回答
0

当使用弹簧org.springframework.core.io.DefaultResourceLoader是一个解决方案:

@Resource DefaultResourceLoader defaultResourceLoader;
defaultResourceLoader.getResource(path).getInputStream()
于 2020-11-10T14:53:10.740 回答