用于从文件夹/ jar文件中读取资源时抽象I / O的Java库?

时间:2012-12-12 19:56:26

标签: java io

当涉及到来自例如的输入源时,是否有一个很好的java库可以透明地处理资源的I / O. java projects / folders或jar archives?

我希望在I:

时使用相同的代码来读取应用程序中的资源
  1. 从eclipse运行代码(来自源代码)
  2. 运行已部署的应用程序(二进制文件)
  3. 从文件夹(src / bin)获取资源列表。
  4. 通常我会这样做:

      URL resource = this.getClass().getClassLoader().getResource("someResource.ext");
    
    假设资源在类路径上,

    从源和二进制文件都可以正常工作。但在某些项目中,只有子文件夹位于类路径而不是其内容(以避免必须将所有文件指定为单独的资源):

    project
     src
     resources
        someResource.txt
        subFolder
           -> resA.txt
           -> resB.txt
           -> resC.txt
              ....
    

    在这种情况下,我需要做一些像这样的低级spagetti:

    http://www.java-gaming.org/topics/how-to-check-if-a-url-is-a-directory/21435/view.html

    我看过一个apache.commons-io,但它并不是我需要的东西。有关处理src和bin的嵌套文件夹/资源的其他库的任何建议吗?

    编辑:

    如下所述,我正在尝试使用此处所述的URL协议处理程序:

    JEditorPane with inline image

    但我不确定我完全理解它。在一个项目中,我依赖于一个包含文件夹的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的位置:

    JEditorPane with inline image

    但我看不出这对我在'myresources'文件夹中获取资源有何帮助。我显然没有以正确的方式使用它。

1 个答案:

答案 0 :(得分:0)

在java 7中有zip file system和其他文件系统的概括。

当然,您也可以创建URL protocol handlers