一尘不染

Java资源作为文件

java

Java中是否有一种方法可以在通过类加载器从jar检索的资源上构造File实例?

我的应用程序使用jar(默认)或运行时指定的文件系统目录(用户输入)中的某些文件。我正在寻找一种一致的方式
a)将这些文件作为流加载
b)分别列出用户定义的目录或jar中的目录中的文件

编辑:显然,理想的方法是完全远离java.io.File。有没有办法从类路径加载目录并列出其内容(包含在其中的文件/实体)?


阅读 394

收藏
2020-03-06

共2个答案

一尘不染

ClassLoader.getResourceAsStream并且Class.getResourceAsStream绝对是加载资源数据的方法。但是,我不相信有任何“列出”类路径元素内容的方法。

在某些情况下,这可能根本是不可能的-例如,a ClassLoader 可以根据要求的资源名称即时生成数据。如果看一下ClassLoaderAPI(基本上是类路径机制的工作原理),你会发现没有任何事情可以做。

如果你知道实际上有一个jar文件,可以将其加载ZipInputStream以查找可用的文件。这将意味着你将为目录和jar文件使用不同的代码。

如果首先分别创建文件,则一种替代方法是包括一种包含可用资源列表的清单文件。将其捆绑在jar文件中或将其作为文件包含在文件系统中,并在为用户提供选择资源之前加载它。

2020-03-06
一尘不染

我遇到了同样的问题,可以使用以下内容:

// Load the directory as a resource
URL dir_url = ClassLoader.getSystemResource(dir_path);
// Turn the resource into a File object
File dir = new File(dir_url.toURI());
// List the directory
String files = dir.list()
2020-03-06