Java中是否有一种方法可以在通过类加载器从jar检索的资源上构造File实例?
我的应用程序使用jar(默认)或运行时指定的文件系统目录(用户输入)中的某些文件。我正在寻找一种一致的方式 a)将这些文件作为流加载 b)分别列出用户定义的目录或jar中的目录中的文件
编辑:显然,理想的方法是完全远离java.io.File。有没有办法从类路径加载目录并列出其内容(包含在其中的文件/实体)?
ClassLoader.getResourceAsStream并且Class.getResourceAsStream绝对是加载资源数据的方法。但是,我不相信有任何“列出”类路径元素内容的方法。
ClassLoader.getResourceAsStream
Class.getResourceAsStream
在某些情况下,这可能根本是不可能的-例如,a ClassLoader 可以根据要求的资源名称即时生成数据。如果看一下ClassLoaderAPI(基本上是类路径机制的工作原理),你会发现没有任何事情可以做。
a ClassLoader
ClassLoaderAPI
如果你知道实际上有一个jar文件,可以将其加载ZipInputStream以查找可用的文件。这将意味着你将为目录和jar文件使用不同的代码。
ZipInputStream
如果首先分别创建文件,则一种替代方法是包括一种包含可用资源列表的清单文件。将其捆绑在jar文件中或将其作为文件包含在文件系统中,并在为用户提供选择资源之前加载它。
我遇到了同样的问题,可以使用以下内容:
// 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()