当前位置: 首页 > 知识库问答 >
问题:

资源目录上的Fileutils.listFiles()

太叔灿
2023-03-14
URL resource = Resources.class.getResource("/my_directory");
File directory = new File(resource.getPath());
Collection<File> files = FileUtils.listFiles(directory, new String[]{"txt"}, true);

文件集合包含所有.txt文件。

如果我在调试器中运行这个项目,它工作得很好。但是,如果我将项目构建为jar文件,它会给出一个错误:

java.lang.IllegalArgumentException: Parameter 'directory' is not a directory

目录文件路径为:

/home/hsz/.../lib/my_project.jar!/my_directory

共有1个答案

微生阳平
2023-03-14

当文件/目录绑定在.jar文件中时,它们不再被视为file对象。可以通过获取它们的输入流来读取它们,如

InputStream input = getClass().getResourceAsStream("my_directory/file");

我会建议您将文件夹与文件系统中的文件保持在一起,并进行您想要执行的操作。是否有任何原因,您希望捆绑到一个罐子之前,这些操作。

根据下面问题中的答案,在Java7中,您可以从JAR(zip)文件创建一个文件系统,然后使用NIO的目录遍历和过滤机制对其进行搜索。这将使编写处理JAR和“分解”目录的代码变得更加容易。你可以试试!

 类似资料:
  • 这对我来说可能是一个很大很愚蠢的问题,但这对我来说一直是个问题。所以我试图在IntelliJ中向我的java resources文件夹添加不同的目录,但它不断在我的目录顶部添加一个“example.example”。如果我不在前一个目录中添加任何内容,它将只允许我在最新的目录中创建一个文件。它不允许我在以前的目录中创建一个新文件,我想知道我是否可以向资源中添加包。我看到其他人使用resources

  • 目录大小和进程详情的数据采集可用脚本falcon-scripts来做。 收集的指标如下: 指标名 注释 du.bytes.used 目录大小,单位byte proc.cpu 进程所占cpu,百分比 proc.mem 进程所占内存,单位byte proc.io.in 进程io输入,单位byte proc.io.out 进程io输出,单位byte 工作原理 du.sh脚本借助du命令采集数据 proc

  • Maven资源插件: 此目标要求配置要复制的资源,并指定OutputDirectory。 使用maven将中的两个(或更多)外部资源目录复制到构建输出目录(请参见和)。 下面是复制单个目录的示例:

  • 问题内容: 我正在寻找一种从给定的classpath目录中获取所有资源名称的列表的方法,例如。 例如,给定一个路径目录包含文件和子目录应该返回一个List 包含下列字符串: 。 它应该同时适用于文件系统和jar中的资源。 我知道我可以用Files,JarFiles和URLs编写一个简短的代码段,但是我不想重新发明轮子。我的问题是,鉴于现有的公共可用库,最快的实现方法是getResourceName

  • 问题内容: 在Maven的资源插件: 此目标要求您配置要复制的资源,并指定outputDirectory。 使用maven 将内的两个(或多个)外部资源目录复制到构建输出目录(请参阅和)。 例如,给定上面复制的目录结构,并使用maven到目标目录。复制一个或另一个很容易,但是,该插件仅接受一个outputDirectory。如果将目录和两个目录都指定为资源,则每个目录的内容将被复制到目录,而不是目

  • 我试图从GraphDB查询资源。我创建了一个名为theOnto的存储库。在图形数据库工作台中,如果我从下拉列表中选择回购,然后查询资源,比如http://localhost:7200/resource/qLinkage/Program,那么它工作正常。这是有效的,因为为存储库名称设置了一些cookie。但是我想打相同的资源url,并获得所需的数据,而无需设置cookie。 这在许多公开可用的Gra