java - 使用 ColdFusion 解压 64 位 zip 文件

标签 java coldfusion zip zipinputstream apache-commons-compress

我使用java.util.zip.ZipFile通过ColdFusion解压大文件。但是,我现在收到此错误:“无效的 CEN header (错误签名)”。

我发现一篇文章表明这​​与 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();

来源:

最佳答案

传入 ArrayLen( Buffer ) 而不是 buffer.length 将解决该错误。

bos = createObject("java","java.io.BufferedOutputStream").init(fos,arrayLen(buffer));

您还可以使用 java.lang.reflect.ArraygetLength( array ) 方法,但与使用 相比,创建另一个实例似乎有点矫枉过正arrayLen()

关于java - 使用 ColdFusion 解压 64 位 zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15094703/

相关文章:

java - "No Instance of type variable R exist so that Observable conforms to Observable"更新到 RxJava2 时出错

java - 格式相对于串联的优势

coldfusion - IIS 7.5 URL 重写不起作用

coldfusion - 在 ColdFusion 集群上重置应用程序范围

zip - 如何使用 zip.js 将多个文件添加到一个 zip 中?

Java enum int 值只能用 JPA 顺序存储?

java - 语音识别开启时如何获取事件

syntax - 如何在ColdFusion中的字符串中编写换行符?

android - 使用 ZipFile 类从多个文件的 zip 存档中解压文件

php - 在单独的服务器上监控 zip 的进度