我们最近实施了加载" .zip"的功能。来自sFTP的文件。然而,在我们实现功能之前,已经有几个" .zip"那里的文件被视为普通文件" * .xml"文件和下载。现在我有一项任务是将这些下载的文件恢复为zip格式。
ZIP文件被视为xml,并且这样做是按照以下方式下载的,
CLOB file = downloadFile(channelSFTP.get(fileName),oConn);
private static CLOB downloadFile(InputStream is, OracleConnection oConn) throws Exception {
CLOB clob = CLOB.createTemporary(oConn, true, CLOB.DURATION_SESSION);
Writer writer = clob.setCharacterStream(1);
ByteArrayOutputStream result = new ByteArrayOutputStream();
int length = -1;
byte[] buffer = new byte[1024];
while ((length = is.read(buffer)) != -1) {
result.write(buffer, 0, length);
}
result.flush();
writer.write(result.toString("UTF-8"));
writer.flush();
return clob;
}
然后CLOB从java存储过程返回到oracle过程,并在BASE64中返回ENCODED。
我尝试恢复文件的内容:
public static void decodeZip(String path, String resPath) throws FileNotFoundException, IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
new BASE64Decoder().decodeBuffer(new FileInputStream(path), bos);
ZipInputStream zis = new ZipInputStream((InputStream) new ByteArrayInputStream(bos.toByteArray()));
ZipEntry entry;
while((entry = zis.getNextEntry()) != null) {
System.out.println(entry.getName());
}
}
其中"路径"是BASE64编码文件的路径。但是我收到以下错误:
java.util.zip.ZipException:存储的块长度无效
on" zis.getNextEntry()"。我认为应该可以做到这一点,但我似乎无法弄清楚,我错过了什么步骤。