我有 100 个 .gz 文件需要解压缩。 我有几个问题
a) 我正在使用 http://www.roseindia.net/java/beginners/JavaUncompress.shtml 给出的代码解压缩 .gz 文件。它工作正常。 任务:- 有没有办法获取压缩文件的文件名。我知道 Java 的 Zip 类提供了要处理的输入文件的枚举。这可以给我存储在 .zip 文件中的文件名、大小等。但是,我们对 .gz 文件是否有相同的文件名,或者文件名是否与 filename.gz 相同但删除了 .gz。
b) 是否有另一种通过调用 java 代码中的实用函数来解压缩 .gz 文件的优雅方法。就像从您的 java 类调用 7-zip 应用程序一样。然后,我不必担心输入/输出流。
提前致谢。 卡 PIL
最佳答案
a) Zip 是一种存档格式,而 gzip 不是。因此,除非(例如)您的 gz 文件是压缩的 tar 文件,否则条目迭代器没有多大意义。你想要的可能是:
File outFile = new File(infile.getParent(), infile.getName().replaceAll("\\.gz$", ""));
b) 您只想解压缩文件吗?如果不是,您可以使用 GZIPInputStream 并直接读取文件,即无需中间解压缩。
不过还好。假设您真的只是 想解压缩文件。如果是这样,您可能会使用这个:
public static File unGzip(File infile, boolean deleteGzipfileOnSuccess) throws IOException {
GZIPInputStream gin = new GZIPInputStream(new FileInputStream(infile));
FileOutputStream fos = null;
try {
File outFile = new File(infile.getParent(), infile.getName().replaceAll("\\.gz$", ""));
fos = new FileOutputStream(outFile);
byte[] buf = new byte[100000];
int len;
while ((len = gin.read(buf)) > 0) {
fos.write(buf, 0, len);
}
fos.close();
if (deleteGzipfileOnSuccess) {
infile.delete();
}
return outFile;
} finally {
if (gin != null) {
gin.close();
}
if (fos != null) {
fos.close();
}
}
}
关于java - 批量解压.gz文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/901003/