我正在开发一个需要经常访问zip文件以添加,删除和读取文件的应用。我正在考虑使用truezip,因为它承诺我可以相当容易地完成所有这些(能够传递arond并从当前压缩文件中读取它提供的最大优势)但是在玩它时我无法添加文件到档案。我的代码:
public void testfunction()
{
//below create the archive if it doesn't exist
TFile tFile = new TFile("src\\test\\resources\\archiveTest\\demoZip.zip");
if (!tFile.exists()) // I get an EOFException here
{
tFile.createNewFile();
}
TFile innerFile = new TFile("src\\test\\resources\\archiveTest\\demoZip.zip\\someText.txt");
innerFile.createNewFile(); // also here
BufferedWriter out = new BufferedWriter(new FileWriter(innerFile));
out.write("demo text");
out.close(); // I know this is bad
}
当我运行这个时,无论我如何安排这个简单的事情,我都会得到一个java.io.EOFException。如果我尝试确保已经创建了文件,那么当我调用tFile.exists()方法时,我就会得到异常。如果我不这样做,那么当我稍后尝试创建innerFile时就会得到它(即使zip文件已经存在)。
我应该注意:truezip原型中的示例使用TApplication类,但我不能这样做。我必须能够开箱即用这个库。我无法改变应用程序的结构,因此使应用程序本身成为TApplication子类并不是一个可行的解决方案(尽管我可以改变调用类的结构,但是我需要)。
目前我的POM包含这些依赖项(包含在我发现的示例中):
<dependency>
<groupId>de.schlichtherle.truezip</groupId>
<artifactId>truezip-file</artifactId>
<version>7.4.1</version>
</dependency>
<dependency>
<groupId>de.schlichtherle.truezip</groupId>
<artifactId>truezip-driver-zip</artifactId>
<version>7.4.1</version>
</dependency>
<dependency>
<groupId>de.schlichtherle.truezip</groupId>
<artifactId>truezip-kernel</artifactId>
<version>7.4.1</version>
</dependency>
<dependency>
<groupId>de.schlichtherle.truezip</groupId>
<artifactId>truezip-driver-file</artifactId>
<version>7.4.1</version>
</dependency>
所以我不知道我在做什么,所以我能得到的任何建议都会受到赞赏,因为互联网上的大多数例子似乎都比我拥有更多的知识。
答案 0 :(得分:0)
您的POM设置看起来是正确的,所以这样的事情应该有效:
public void testfunction()
{
TFile innerFile = new TFile("src/test/resources/archiveTest/demoZip.zip/someText.txt");
BufferedWriter out = new BufferedWriter(new FileWriter(innerFile));
try {
out.write("demo text");
} finally {
out.close();
}
}
请注意,存档文件是一个虚拟目录,因此为了创建一个,您可以调用TFile.mkdir(),而不是TFile.createNewFile()。 但是,不需要首先创建存档文件。如果它尚不存在,它将自动生成。
使用项目的Maven原型时,您可以找到更多示例:http://truezip.java.net/kick-start/index.html
P.S。:TrueZIP 7.4.2已经发布 - 请更新您的依赖项。