【发布时间】:2014-03-21 01:40:18
【问题描述】:
我正在编写一个简短的应用程序,它打开一个 .jar 文件,对其内容运行一些转换,然后再次将其包装为一个 .jar 文件。我正在使用How to use JarOutputStream to create a JAR file? 中的方法来创建新的 jar 文件,它的工作原理是它在新的 jar 文件中创建一个文件层次结构,该文件层次结构一直延伸到我的计算机的根目录。
这是完全合乎逻辑的,因为我将目标目录作为来自计算机根目录的路径传递给进程。我找不到任何 other 方式来传达进程需要能够找到我的目标文件夹的上下文。如何设置要从中创建 .jar 文件的上下文?
澄清一下:
我已经重写了上面链接的解决方案的 Run 方法以接受两个参数:一个定义输出 jar 文件的名称和位置的字符串,以及一个定义我要压缩的文件夹的位置的字符串,如下所示:
public void run(String output, String inputDirectory) throws IOException
{
JarOutputStream target = new JarOutputStream(new FileOutputStream(output));
add(new File(inputDirectory), target, inputDirectory.length());
target.close();
}
我交给该方法的两个示例值是:C:/temp/964ca469-5f7b-4c56-8b5a-72b4c1c851e0/help.jar 和 C:/temp/964ca469-5f7b-4c56-8b5a-72b4c1c851e0/出/
我希望 .jar 文件的结构在“out”之后的正斜杠处有根,但 .jar 文件的层次结构是:
C:
|-Temp
|-964ca469-5f7b-4c56-8b5a-72b4c1c851e0
|-out
|-{content}
我尝试将实际内容之前的字符串长度传递给 Add 方法,并在添加 JarEntry 之前将其删除,但这只会让我出现超出索引的错误,这非常有意义,因为我只是frikkin' 摸索。
在添加文件之前,必须有一种方法可以将 JarEntry 类设置为文件夹层次结构中的特定点,或者有其他方法可以做同样的事情,但到目前为止我还找不到。
谢谢。
【问题讨论】:
-
你为什么不改用zip filesystem provider?
-
主要原因是我是一个完整的 Java 菜鸟。我会尝试一下,但我想从自我完善的角度来理解我在这里做错了什么;我认为这可能会在接下来的几个月中出现很多。
-
好吧,如果您是初学者,使用新界面更是一个理由,它更容易使用;)