【发布时间】:2011-10-02 21:18:42
【问题描述】:
我需要将资源文件夹从 jar 中提取到系统中的所需位置。我想通过调用同一个 jar 中的类中的函数来实现。
我不想一次复制一个文件。您能建议我一种复制整个文件夹的方法吗?
我最初想将它们压缩成一个 zip,然后将其复制到其他地方,然后解压缩。 这将如何运作?有没有更有效的方法来做到这一点?
提前致谢。
【问题讨论】:
标签: java resources jar directory extract
我需要将资源文件夹从 jar 中提取到系统中的所需位置。我想通过调用同一个 jar 中的类中的函数来实现。
我不想一次复制一个文件。您能建议我一种复制整个文件夹的方法吗?
我最初想将它们压缩成一个 zip,然后将其复制到其他地方,然后解压缩。 这将如何运作?有没有更有效的方法来做到这一点?
提前致谢。
【问题讨论】:
标签: java resources jar directory extract
如果您打算使用 java API 执行此操作,我只知道一种方法:您必须使用 JarInputStream 或 ZipInputStream,遍历 Zip 条目,检测哪些条目属于文件夹并提取它们,即从 zip 读取并写入磁盘。没有其他“神奇”的方式。
但如果您愿意,您可能可以使用某种更高级别的 API。检查来自雅加达的 VFS:http://commons.apache.org/vfs/
它提供的 API 可能满足您的需求。
【讨论】:
您可以使用Runtime.exec api 来执行类似以下的操作:
jar xf <your_jar_file_name> <path_to_directory_to_be_extracted>
这样,您不必创建专门的类来处理Jar文件,您可以专注于解决手头的实际问题。
注意:这仅限于 JDK,可能不适用于 JRE。
【讨论】:
sun.tools.jar.Main.main("xf", jarfilename, path)
Runtime.exec("whatever command"); - 但更改工作目录几乎是不可能的。您可以将整个内容包装在一个批处理/shell 文件中,然后使用 exec API 从您的 java 应用程序中调用它。使脚本足够通用以接受命令行参数,您可以通过不同风格的exec API 传递它们。