繁体   English   中英

无法使用zip4j压缩文件

[英]Unable to zip files using zip4j

无法从目录列表中创建一个zip文件。 我能够读取目录并打印它们。 但是,当我尝试压缩它们时,它会抛出错误:

net.lingala.zip4j.exception.ZipException: java.io.FileNotFoundException: D:\DZipTest\sample - Copy (1) (Access is denied)
    at net.lingala.zip4j.core.ZipFile.readZipInfo(ZipFile.java:431)
    at net.lingala.zip4j.core.ZipFile.checkZipModel(ZipFile.java:935)
    at net.lingala.zip4j.core.ZipFile.addFiles(ZipFile.java:263)
    at net.lingala.zip4j.examples.zip.AddFilesWithAESEncryption2.<init>(AddFilesWithAESEncryption2.java:107)
    at net.lingala.zip4j.examples.zip.AddFilesWithAESEncryption2.main(AddFilesWithAESEncryption2.java:121)
Caused by: java.io.FileNotFoundException: D:\DZipTest\sample - Copy (1) (Access is denied)
    at java.io.RandomAccessFile.open(Native Method)
    at java.io.RandomAccessFile.<init>(RandomAccessFile.java:241)
    at net.lingala.zip4j.core.ZipFile.readZipInfo(ZipFile.java:420)
    ... 4 more

这是类文件:

                public AddFilesWithAESEncryption2() 
                   {                    
                    String ExtractedFiles = "D:/DZipTest/";
                    String Directories;
                    File folder2 = new File(ExtractedFiles);
                    File[] listOfFiles2 = folder2.listFiles();

                    for (int i = 0; i < listOfFiles2.length; i++) 
                    {
                        if (listOfFiles2[i].isDirectory()) 
                        {
                            Directories = listOfFiles2[i].getName();
                            String filesToBeZipped = "D:/DZipTest/" + Directories;
                            System.out.println(Directories);

                            // Initiate ZipFile object with the path/name of the zip file.
                            ZipFile zipFile = new ZipFile(filesToBeZipped);

                            // Build the list of files to be added in the array list
                            // Objects of type File have to be added to the ArrayList
                            ArrayList filesToAdd = new ArrayList();
                            filesToAdd.add(new File(filesToBeZipped));

                            // Initiate Zip Parameters 
                            ZipParameters parameters = new ZipParameters();
                            // set compression method to deflate compression
                            parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); 

                            // DEFLATE_LEVEL_NORMAL - Optimal balance between compression level/speed
                            parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);

                            // Set the encryption flag to true
                            parameters.setEncryptFiles(true);

                            // Set the encryption method to AES Zip Encryption
                            parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
                            parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);

                            // Set password
                            parameters.setPassword("test");

                            // Now add files to the zip file
                            // Note: To add a single file, the method addFile can be used
                            // Note: If the zip file already exists and if this zip file is a split file
                            // then this method throws an exception as Zip Format Specification does not 
                            // allow updating split zip files
                            zipFile.addFiles(filesToAdd, parameters);
                        }
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

我想做的是从zip中提取文件,然后使用加密方式重新压缩它们,因为我无法直接对其进行加密。

您可以尝试以下代码

   public static void generateZip(String sourceFolder, String zipFile){
        fileList = new ArrayList<String>();

        generateFileList(new File(sourceFolder), sourceFolder);

     byte[] buffer = new byte[1024];

     try{

        FileOutputStream fos = new FileOutputStream(zipFile);
        ZipOutputStream zos = new ZipOutputStream(fos);

        for(String file : fileList){ 

            ZipEntry ze= new ZipEntry(file);
            zos.putNextEntry(ze);
            FileInputStream in = new FileInputStream(sourceFolder + File.separator + file);

            int len;
            while ((len = in.read(buffer)) > 0) {
                zos.write(buffer, 0, len);
            } 
            in.close();
        }

        zos.closeEntry();
        zos.close();

    }catch(IOException ex){

    }
   }

    public static void generateFileList(File node, String sourceFilePath){ 
    if(node.isDirectory()){
        String[] subNote = node.list();
        for(String filename : subNote){
            fileList.add(filename);           
        }
    }
   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM