Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从文件夹/jar文件中读取资源时用于抽象I/O的Java库?_Java_Io - Fatal编程技术网

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

从文件夹/jar文件中读取资源时用于抽象I/O的Java库?,java,io,Java,Io,当涉及到来自java项目/文件夹或jar归档的输入源时,是否有一个好的java库可以透明地处理资源的I/O 当我: 从eclipse运行代码(从源代码) 运行已部署的应用程序(二进制文件) 从文件夹(src/bin)获取资源列表 通常我会: URL resource = this.getClass().getClassLoader().getResource("someResource.ext"); 假设资源位于类路径上,从源代码和二进制文件都可以很好地工作。但在某些项目中,只有子文件夹位

当涉及到来自java项目/文件夹或jar归档的输入源时,是否有一个好的java库可以透明地处理资源的I/O

当我:

  • 从eclipse运行代码(从源代码)
  • 运行已部署的应用程序(二进制文件)
  • 从文件夹(src/bin)获取资源列表
  • 通常我会:

      URL resource = this.getClass().getClassLoader().getResource("someResource.ext");
    
    假设资源位于类路径上,从源代码和二进制文件都可以很好地工作。但在某些项目中,只有子文件夹位于类路径上,而不是其内容(以避免将所有文件指定为单独的资源):

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

    我已经看过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();
    }
    
    其中数据连接和处理程序是从以下位置复制的:

    但我不知道这如何帮助我获取“myresources”文件夹中的资源。我显然没有以正确的方式使用它。

    在java 7和其他文件系统中有一些泛化


    当然,您也可以创建。

    我并不真正理解这个问题。通常,给定资源是否在类路径中。。。在类路径的情况下,您需要一个完整的限定名(包+资源),在所有其他情况下,您可以使用外部路径引用或URL类加载器。问题可以归结为如何检查URL是否指向目录或文件。我只能找到这个:我在URL协议方法上有问题,请看我编辑的帖子,也许你有什么意见?
    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();
    }