我最近在寻找一个体面的库来处理 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?我只需要对简单的 ZIP 文件进行简单的 R/W 访问。