从目录列表中创建zip。 Java的

时间:2014-12-10 13:27:24

标签: java zip archive

我有一些类,其中包含zip文件的目录,但我想将其修改为打包目录列表。我在尝试,但没有成功。我不知道为什么。 所以,我给了List并希望将每个目录(包含子目录和文件)放入存档。

这里有我的主要课程:

class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        ZipNew zn = new ZipNew();

        List<String> foldersList = new ArrayList<String>();
        foldersList.add("c:\\test\\t1");
        foldersList.add("c:\\test\\t2");
        foldersList.add("c:\\test\\t3");

        String zipNewPath = "c:\\test\\testAll.zip";

        zn.pack(foldersList, zipNewPath);
    }
}

这是zip处理器:

public class ZipNew {
    private List<String> fileList = new ArrayList<String>();
    private String outputZip;
    private List<String> sourceFolders = new ArrayList<String>();
    private String currFolder;

    public boolean pack(List<String> sourceFolders, String outputZip) {
        this.outputZip = outputZip;
        this.sourceFolders = sourceFolders;
        for (String sourceFolder : sourceFolders) {
            this.currFolder = sourceFolder;
            generateFileList( new File(sourceFolder) );
        }
        boolean packed = packInZip(outputZip);
        return packed;
    }

    private void generateFileList(File node){
        if(node.isFile()){
            fileList.add(generateZipEntry(node.getAbsoluteFile().toString()));
        }
        else if(node.isDirectory()){
            String[] subNote = node.list();
            for(String filename : subNote){
                generateFileList(new File(node, filename));
            }
        }
    }

    private String generateZipEntry(String file){
        return file.substring(currFolder.length() + 1, file.length());
    }

    private boolean packInZip(String zipFile){
        byte[] buffer = new byte[1024];
        try{
            FileOutputStream fos = new FileOutputStream(zipFile);
            ZipOutputStream zos = new ZipOutputStream(fos);

            for (String sourceFolder : sourceFolders) {
                this.currFolder = sourceFolder;
                for (String file : this.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();
            return true;
        } catch(IOException ex){
            ex.printStackTrace();
            return false;
        }
    }
}

最后我希望存档包含文件夹&#34; c:\ test \ t1&#34;,&#34; c:\ test \ t2&#34;,&#34; c:\ test \ T3&#34; 感谢。

1 个答案:

答案 0 :(得分:0)

答案:)

public class ZipNew {
    private List<String> fileList = new ArrayList<String>();
    private String outputZip;
    private List<String> sourceFolders = new ArrayList<String>();
    private String currFolder;

    public boolean pack(List<String> sourceFolders, String outputZip) {
        this.outputZip = outputZip;
        this.sourceFolders = sourceFolders;
        for (String sourceFolder : sourceFolders) {
            this.currFolder = sourceFolder;
            generateFileList( new File(currFolder) );
        }
        boolean packed = packInZip(outputZip);
        return packed;
    }

    private void generateFileList(File node){
        if(node.isFile()){
            fileList.add(generateZipEntry(node.getAbsoluteFile().toString()));
        }
        else if(node.isDirectory()){
            String[] subNote = node.list();
            for(String filename : subNote){
                generateFileList(new File(node, filename));
            }
        }
    }

    private String generateZipEntry(String file){
        return file.substring(currFolder.lastIndexOf("\\") + 1, file.length());
    }

    private boolean packInZip(String zipFile){
        byte[] buffer = new byte[1024];
        try{
            FileOutputStream fos = new FileOutputStream(zipFile);
            ZipOutputStream zos = new ZipOutputStream(fos);


                for (String file : this.fileList) {
                    ZipEntry ze = new ZipEntry(file);
                    zos.putNextEntry(ze);
                    FileInputStream in = new FileInputStream(currFolder.substring(0, currFolder.lastIndexOf("\\")) + File.separator + file);
                    int len;
                    while ((len = in.read(buffer)) > 0) {
                        zos.write(buffer, 0, len);
                    }
                    in.close();
                }


            zos.closeEntry();
            zos.close();
            return true;
        } catch(IOException ex){
            ex.printStackTrace();
            return false;
        }
    }
}
相关问题