簡體   English   中英

無法使用Java創建用於壓縮文件的文件夾?

[英]Unable to make folders to zip files using java?

在這里,我在“圖書”文件夾中有文件夾(“書”)結構,我有一個名為“物理,化學,科學,英語”的文件夾。我將“圖書”文件夾作為zipDeleteFile傳遞,但是在所有文件夾中,必須將其轉換為與physics.zip相同的文件夾(“書”) ,chemistry.zip,science.zip,english.zip。但是此代碼無法正常工作。

public void foldertToZip(File zipDeleteFile) {
    //System.out.println(zipDeleteFile);
    File directoryToZip = zipDeleteFile;
    List<File> fileList = new ArrayList<File>();
    //System.out.println("---Getting references to all files in: " + directoryToZip.getCanonicalPath());
    getAllFiles(directoryToZip, fileList);
    //System.out.println("---Creating zip file");
    writeZipFile(directoryToZip, fileList);
    //System.out.println("---Done");
}

public static void getAllFiles(File dir, List<File> fileList) {
    try {
        File[] files = dir.listFiles();
        for (File file : files) {
            fileList.add(file);
            if (file.isDirectory()) {
                System.out.println("directory:" + file.getCanonicalPath());
                getAllFiles(file, fileList);
            } else {
                System.out.println("     file:" + file.getCanonicalPath());
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public static void writeZipFile(File directoryToZip, List<File> fileList) {
    try {
        try (FileOutputStream fos = new FileOutputStream(directoryToZip.getName() + ".zip")) {
            ZipOutputStream zos = new ZipOutputStream(fos);

            for (File file : fileList) {
                if (!file.isDirectory()) { // we only zip files, not directories
                    addToZip(directoryToZip, file, zos);
                }
            }

            zos.close();
        }
    } catch (FileNotFoundException e) {
    } catch (IOException e) {
    }
}

public static void addToZip(File directoryToZip, File file, ZipOutputStream zos) throws FileNotFoundException,
        IOException {
    try (FileInputStream fis = new FileInputStream(file)) {
        String zipFilePath = file.getCanonicalPath().substring(directoryToZip.getCanonicalPath().length() + 1,
                file.getCanonicalPath().length());
        System.out.println("Writing '" + zipFilePath + "' to zip file");
        ZipEntry zipEntry = new ZipEntry(zipFilePath);
        zos.putNextEntry(zipEntry);
        byte[] bytes = new byte[1024];
        int length;
        while ((length = fis.read(bytes)) >= 0) {
            zos.write(bytes, 0, length);
        }
        zos.closeEntry();
    }
}`'

最初,我將zipDeleteFile作為C:\\ Books傳遞給Books,我擁有所有物理,英語,科學文件夾,這些文件夾必須轉換為同一根文件夾(Books)中的zip文件。

因此,基本上,您希望將Books文件夾中的每個目錄壓縮為自己的zip文件。 您可以通過幾種方法來執行此操作,但最簡單的方法可能是更改調用文件foldertToZip

因此,而不是(類似)...

foldertToZip(new File("C:\\Books"));

你可以做類似...

for (File file : new File("C:\\Books").listFiles()) {
    if (file.isDirectory()) {
        foldertToZip(file);
    }
}

這將導致將Books中的每個目錄添加到其自己的zip文件中,該文件將位於Books

您可能需要進行的另一項更改是...

public static void writeZipFile(File directoryToZip, List<File> fileList) {
    try {
        //try (FileOutputStream fos = new FileOutputStream(directoryToZip.getName() + ".zip")) {
        File path = directoryToZip.getParentFile();
        File zipFile = new File(path, directoryToZip.getName() + ".zip");
        try (FileOutputStream fos = new FileOutputStream(zipFile)) {

這將在要壓縮的目錄(即Books目錄)的父目錄內創建zip文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM