如何从JAR中提取文件夹

Leo*_*d B 7 java

我需要复制一个文件夹,在运行时打包在Jar中.我想通过调用同样包含在同一文件夹中的类中的函数来实现.

我尝试过使用getSystemResource:

URL sourceDirUrl = ClassLoader.getSystemResource("sourceDirName"); 
File sourceDir = new File(sourceDirUrl.toURI());
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我可能必须getResourceAsStream递归使用函数.有没有更优雅/更直接的方式来做到这一点?

如果我必须递归地执行:1.我不想指定硬编码的文件,我想动态地执行2.我不想创建单独的存档.我希望这个资源与处理它的类在同一个Jar中

谢谢

我最终做了Koziołek在下面提出的建议.虽然我希望有一个更优雅的解决方案,但它看起来像它一样好.

gre*_*det 5

使用类加载器无法检索文件夹,因为它不能是类路径的资源.

有几种解决方案可行:

  • 如果您事先知道要查找的文件名,则使用类加载器getResource方法逐个检索文件夹的所有资源.
  • 将整个文件夹打包到一个存档中,您可以使用以前的方法从类加载器中检索该存档.
  • 直接解压缩jar以检索包含的文件夹.它需要知道文件系统中jar的精确位置.根据应用程序的不同,这并不总是可行的,并且不可移植.

我最好选择更便携和灵活的第二种解决方案,但需要为文件夹内容的所有修改重新打包存档.


Koz*_*łek 2

Jar 是简单的 ZIP 文件。您可以使用java.util.zip.*包来解压文件。