我有100个.gz文件需要解压缩。 我有几个问题
a)我使用http://www.roseindia.net/java/beginners/JavaUncompress.shtml给出的代码解压缩.gz文件。它的工作正常。 任务: - 有没有办法获取压缩文件的文件名。我知道Java的Zip类给出了entery文件的枚举工作。这可以给我存储在.zip文件中的文件名,大小等。但是,我们对.gz文件是否一样,或者文件名与filename.gz相同,并删除.gz。
b)是否有另一种通过调用java代码中的实用程序函数来解压缩.gz文件的优雅方法。就像从java类调用7-zip应用程序一样。然后,我不必担心输入/输出流。
提前致谢。 卡皮尔
答案 0 :(得分:10)
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();
}
}
}
答案 1 :(得分:2)
关于A,gunzip
命令创建一个原始名称减去.gz
后缀的未压缩文件。请参阅man page。
关于B,您是否需要专门的gunzip,还是其他压缩算法呢? 7zip使用java port LZMA压缩算法来创建.7z
文件,但它不会处理.gz
个文件。
答案 2 :(得分:0)
如果您有一定数量的文件要解压缩一次,为什么不使用现有工具呢?
正如Paul Morie所注意到的那样,gunzip
可以做到这一点:
for i in *.gz; do gunzip $i; done
它会自动命名它们,剥离.gz$
在Windows上,可能会尝试使用winrar,或者http://unxutils.sf.net
gunzip
答案 3 :(得分:0)
GZip通常仅用于单个文件,因此 通常不包含有关单个文件的信息。要将多个文件捆绑到一个压缩归档中,首先将它们组合成一个未压缩的Tar文件(包含有关各个内容的信息),然后将其压缩为单个文件。这种组合称为Tarball。
有一些库可以从Tar中提取单个文件信息,就像使用ZipEntries一样。 One example.您首先必须将.gz文件解压缩到临时文件中才能使用它,或者至少将GZipInputStream提供给Tar库。
您也可以使用Java从命令行调用7-Zip。 7-Zip命令行语法在这里:7-Zip Command Line Syntax.从Java调用命令shell的示例:Executing shell commands in Java.您必须调用7-Zip两次:一次从.tar.gz中提取Tar或.tgz文件,并再次从Tar中提取单个文件。
或者,你可以做一件简单的事情并写一个简短的shell脚本或批处理文件来进行解压缩。没有理由在圆孔中敲击方形钉 - 这就是批量文件的制作方法。作为奖励,您还可以为它们提供参数,大大降低了java命令行执行的复杂性,同时仍然允许java控制执行。
答案 4 :(得分:0)
你试过吗
gunzip *.gz
答案 5 :(得分:0)
.gz文件(gzip)可以存储压缩文件的文件名。因此,例如,FuBar.doc可以保存在myDocument.gz中,并且通过适当的解压缩,文件可以恢复为文件名FuBar.doc。不幸的是,java.util.zip.GZIPInputStream不支持任何读取文件名的方法,即使它存储在存档中。