我已经有一段时间没有使用Java I/O了,也不清楚如何最好地处理Zip和GZip文件。 我不需要完整的演示实例 - 我主要是想知道正确的接口和方法。 是的,我可以查找任意的教程,但性能可能会有影响(这些文件可能很大),我关心的是使用最佳工具来完成工作。
我将要实现的基本过程:
- 下载一堆文件(可能是压缩的或gzip的,也可能都有)到一个临时文件夹中。
- 将所有提取后的文件添加到一个临时文件夹中的新zip文件中。
输入文件可能被压缩并进行多次归档。例如,“全面提取”应该获取以下任何输入(我不能控制这些),并留下 foo.txt
:
foo.txt.gz
foo.txt.zip
foo.txt.gz.zip
foo.txt.zip.gz
- ...
foo.txt.gz.gz.gz.zip.gz.zip.zip.gz.gz
- ...
然后,我可能会剩下 foo.txt
, bar.mp3
, baz.exe
- 所以我只需将它们全部添加到一个新的zip文件中,文件名为一些通用名称。
问题:
- 考虑到文件大小可能是个问题,我应该使用哪些(接口/类/方法)来快速:
- 提取zip文件?
- 提取gzip文件?
- 写入zip文件?
- 保留单独提取的文件在内存中,再写回磁盘,这样做是否更好?还是,
- 潜在大文件是否使得这不是一个好主意?
try (InputStream in = new GZIPInputStream(new FileInputStream("file.txt.gz")); OutputStream out = new FileOutputStream("file.txt")) { in.transferTo(out); }
- Martin