当涉及到来自例如的输入源时,是否有一个好的 Java 库可以透明地处理资源的 I/O。java项目/文件夹或jar档案?
我想在我的应用程序中使用相同的代码来读取资源:
- 从 Eclipse 运行代码(来自源代码)
- 运行已部署的应用程序(二进制文件)
- 从文件夹 (src/bin) 中获取资源列表。
通常我会这样做:
URL resource = this.getClass().getClassLoader().getResource("someResource.ext");
假设资源在类路径上,从源代码和二进制文件都可以正常工作。但是在某些项目中,只有子文件夹位于类路径上,而不是其内容(以避免必须将所有文件指定为单独的资源):
project
src
resources
someResource.txt
subFolder
-> resA.txt
-> resB.txt
-> resC.txt
....
在这种情况下,我需要像这样做一些低级意大利面条:
http://www.java-gaming.org/topics/how-to-check-if-a-url-is-a-directory/21435/view.html
我看过一个 apache.commons-io,但它并不完全符合我的需要。对于处理 src 和 bin 的嵌套文件夹/资源的其他库有什么建议吗?
编辑:
正如下面所推荐的,我正在尝试使用此处描述的 URL 协议处理程序:
但我不确定我是否完全理解它。在一个项目中,我依赖一个 jar 文件,里面有一个文件夹:
myjar.jar
myresources
> fileA.txt
> fileB.txt
> fileC.txt
在我的应用程序中,我这样做:
URL url = this.getClass().getClassLoader().getResource("myresources");
System.out.println(url.getPath());
Handler.install();
URLConnection con = new DataConnection(url);
try {
inputStream = con.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
从哪里复制 DataConnection 和 Handler:
但我看不出这如何帮助我获取“myresources”文件夹中的资源。我显然没有以正确的方式使用它。