我最近正在寻找一个可以使用ZIP文件的体面库。 SO推荐的TrueVFS上有几篇帖子,原TrueZip。
我需要提取单个文件,修改它们,然后将它们放回存档,覆盖旧文件。目标是编写库以将Java宏上载到ODF文件,Libre Office / Open Office文档,这些文件实际上是标准的ZIP文件。
TrueVFS文档缺乏基础知识,因此花了一些时间和实验才发现可以轻松完成:
import net.java.truevfs.access.TArchiveDetector;
import net.java.truevfs.access.TFile;
import net.java.truevfs.access.TVFS;
import net.java.truevfs.comp.zipdriver.ZipDriver;
public class BasicOperations {
public File extractFileFromArchive(File archiveFile, String pathInArchive, File destFolder) throws Exception {
TFile archivedFile = new TFile(archiveFile, pathInArchive);
File destFile = new File(destFolder, pathInArchive);
destFile.getParentFile().mkdirs();
archivedFile.cp_rp(destFile);
return destFile;
}
public void addFileToArchive(File archiveFile, String pathInArchive, File srcFile) throws Exception {
TFile destArchiveFile = new TFile(archiveFile, pathInArchive, new TArchiveDetector("zip", new ZipDriver()));
TFile.cp_p(srcFile, destArchiveFile);
}
}
到目前为止还不错。但是存在一个问题 - 大量依赖!。即使有基本资料:
<dependency>
<groupId>net.java.truevfs</groupId>
<artifactId>truevfs-profile-default</artifactId>
<version>0.11.0</version>
<type>pom</type>
</dependency>
Maven解析接近50(!!!)依赖库。
这并非全是坏事,其中一些标记为提供(不确定它对桌面应用程序有什么影响),并且大多数库实际上是非常小的微库。他们中的大多数来自同一作者。看起来他从Apache Jakarta库中复制(提取)了大量代码。我设法排除了一些库,比如Swing GUI输入加密档案的密码,但大多数依赖都非常顽固。
最令人发指的是对scala-library的依赖(org.scala-lang:scala-library:2.11.6)。 TrueVFS应该是Java库。我检查过源代码,但似乎没有相关内容。这是一个不起眼的司机吗?当我尝试将其从依赖项maven中排除时,我的测试失败了java.lang.ClassNotFoundException: scala.Immutable
。
所以问题是,请问,是否有人可以共享Maven配置或建议代码更改,这会显着减少依赖关系,即scala-library?我只需要一个简单的R / W访问简单的ZIP文件。