我使用java.util.zip.ZipFile
使用ColdFusion解压缩大文件。但是,我现在收到此错误:“无效的CEN标题(错误的签名)”。
我发现一条帖子显示这与zip 64位格式有关,我可以使用java.util.zip.ZipInputStream
来处理它。但是,我无法解决这个错误:“您试图取消引用类型类型的标量变量[B作为具有成员的结构。”这是由这一行引起的:
bos = createObject("java","java.io.BufferedOutputStream").init(fos,buffer.length);
非常感谢任何帮助!
这是我的代码
fis = createObject("java","java.io.FileInputStream").init(zipFilePath);
bis = createObject("java", "java.io.BufferedInputStream").init(fis);
zis = createObject("java", "java.util.zip.ZipInputStream").init(bis);
cnt=0;
while(1==1){
cnt++;
entry = zis.getNextEntry();
if (isNull(entry))
{
writeOutput("done"&now());
break;
}
nm = entry.getName();
lenPth = len(nm) - len(getFileFromPath(nm));
if (lenPth) {
pth = outputPath & left(nm, lenPth);
} else {
pth = outputPath;
}
if (NOT directoryExists(pth)) {
fil = createObject("java", "java.io.File");
fil.init(pth);
fil.mkdirs();
}
byteClass = createObject("java", "java.lang.Byte").TYPE;
buffer = createObject("java","java.lang.reflect.Array").newInstance(byteClass, 2048);
fos = createObject("java","java.io.FileOutputStream").init(outputPath & nm);
bos = createObject("java","java.io.BufferedOutputStream").init(fos,buffer.length);
while(1==1) {
size = zis.read(buffer, 0, buffer.length);
if(size == -1)
break;
bos.write(buffer, 0, size);
}
bos.flush();
bos.close();
}
zis.close();
fis.close();
来源:
答案 0 :(得分:2)
传递ArrayLen( Buffer )
代替buffer.length
将解决错误。
bos = createObject("java","java.io.BufferedOutputStream").init(fos,arrayLen(buffer));
您还可以使用getLength( array )
的{{1}}方法,但与使用java.lang.reflect.Array