我正在从第三方检索 .zip 文件。我想将它们解压缩到另一个文件夹。为此,我找到了一种完全可以做到这一点的方法,请参阅下面的代码。它遍历所有文件并将它们解压缩到另一个文件夹。然而,当观察相应的压缩方法时,我发现某些文件的情况发生了变化。对于某些文件,它会指出:“无效的压缩方法”
,之后它会中止进一步解压缩 zip 文件。
由于压缩方法似乎发生了变化,我怀疑我需要将压缩方法设置为正确的方法(但这可能是一个错误的假设)。那么我的问题是:如何确定所需的压缩方法?
我正在使用的代码:
public void unZipIt(String zipFile, String outputFolder){
//create output directory is not exists
File folder = new File(OUTPUT_FOLDER);
if(!folder.exists()){
folder.mkdir();
}
FileInputStream fis = null;
ZipInputStream zipIs = null;
ZipEntry zEntry = null;
try
{
fis = new FileInputStream(zipFile);
zipIs = new ZipInputStream(new BufferedInputStream(fis));
while((zEntry = zipIs.getNextEntry()) != null){
System.out.println(zEntry.getMethod());
try{
byte[] tmp = new byte[4*1024];
FileOutputStream fos = null;
String opFilePath = OUTPUT_FOLDER + "\\" + zEntry.getName();
System.out.println("Extracting file to "+opFilePath);
fos = new FileOutputStream(opFilePath);
int size = 0;
while((size = zipIs.read(tmp)) != -1){
fos.write(tmp, 0 , size);
}
fos.flush();
fos.close();
} catch(IOException e){
System.out.println(e.getMessage());
}
}
zipIs.close();
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
}
catch(IOException ex){
System.out.println(ex.getMessage());
}
}
目前我正在检索以下输出:
8
Extracting file to C:\Users\nlmeibe2\Documents\Projects\Output_test\SOPHIS_cptyrisk_tradedata_1192_20140616.csv
8
Extracting file to C:\Users\nlmeibe2\Documents\Projects\Output_test\SOPHIS_cptyrisk_underlying_1192_20140616.csv
0
Extracting file to C:\Users\nlmeibe2\Documents\Projects\Output_test\10052013/
12
Extracting file to C:\Users\nlmeibe2\Documents\Projects\Output_test\MRM_Daily_Position_Report_Package_Level_Underlying_View_EQB_v2_COBDATE_2014-06-16_RUNDATETIME_2014-06-17-04h15.csv
invalid compression method
invalid compression method
最佳答案
由于您只打印异常消息而不打印堆栈跟踪(带有行号),因此不可能确切知道异常在哪里引发,但我认为直到您实际尝试从 ZipEntry 中读取时才会引发异常。
如果输出中的数字是 ZIP 方法,则您遇到的最后一个条目是使用方法 12 (bzip2) 进行压缩的,而 Java ZIP 实现不支持该方法。 PKWare(ZIP 格式的维护者)定期向 ZIP 规范添加新的压缩方法,目前指定了大约 12-15 种(不确定具体数量)压缩方法。 Java 仅支持方法 0(存储)和 8(压缩),如果您尝试使用不受支持的压缩方法解压缩 ZIP 文件,则会抛出异常并显示消息“无效的压缩方法”。
WinZip 和 Windows 中的 ZIP 函数都可能使用 Java API 不支持的压缩方法。
关于java - 如何确定 zip 文件的压缩方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24368236/