Java 76. Lập trình nén và giải nén file | Lập trình Java



    Bản quyền thuộc về TITV.vn, 
    vui lòng không đăng tải lại nội dung từ trang này.

    Video giải thích chi tiết

    Tham khảo tại đây: https://www.baeldung.com/java-compress-and-uncompress

     Code chi tiết 

    
    package main;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    public class ZipFile {
        public static void main(String[] args) throws IOException {
            String sourceFile = "/Users/mac/eclipse-workspace/Java_76/test.txt";
            FileOutputStream fos = new FileOutputStream("/Users/mac/eclipse-workspace/Java_76/compressed.zip");
            ZipOutputStream zipOut = new ZipOutputStream(fos);
            
            File fileToZip = new File(sourceFile);
            FileInputStream fis = new FileInputStream(fileToZip);
            
            ZipEntry zipEntry = new ZipEntry(fileToZip.getName());
            zipOut.putNextEntry(zipEntry);
            byte[] bytes = new byte[1024];
            int length;
            while((length = fis.read(bytes)) >= 0) {
                zipOut.write(bytes, 0, length);
            }
            
            zipOut.close();
            fis.close();
            fos.close();
        }
    }
    

    
    package main;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Arrays;
    import java.util.List;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    public class ZipMultipleFiles {
    	public static void main(String[] args) throws IOException {
            List<String> srcFiles = Arrays.asList("/Users/mac/eclipse-workspace/Java_76/test1.txt", "/Users/mac/eclipse-workspace/Java_76/test2.txt");
            FileOutputStream fos = new FileOutputStream("/Users/mac/eclipse-workspace/Java_76/multiCompressed.zip");
            ZipOutputStream zipOut = new ZipOutputStream(fos);
            for (String srcFile : srcFiles) {
                File fileToZip = new File(srcFile);
                FileInputStream fis = new FileInputStream(fileToZip);
                ZipEntry zipEntry = new ZipEntry(fileToZip.getName());
                zipOut.putNextEntry(zipEntry);
    
                byte[] bytes = new byte[1024];
                int length;
                while((length = fis.read(bytes)) >= 0) {
                    zipOut.write(bytes, 0, length);
                }
                fis.close();
            }
            zipOut.close();
            fos.close();
        }
    }
    

    package main;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    public class ZipDirectory {
    	public static void main(String[] args) throws IOException {
            String sourceFile = "/Users/mac/eclipse-workspace/Java_76/zipTest";
            FileOutputStream fos = new FileOutputStream("/Users/mac/eclipse-workspace/Java_76/dirCompressed.zip");
            ZipOutputStream zipOut = new ZipOutputStream(fos);
            File fileToZip = new File(sourceFile);
    
            zipFile(fileToZip, fileToZip.getName(), zipOut);
            zipOut.close();
            fos.close();
        }
    
        private static void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException {
            if (fileToZip.isHidden()) {
                return;
            }
            if (fileToZip.isDirectory()) {
                if (fileName.endsWith("/")) {
                    zipOut.putNextEntry(new ZipEntry(fileName));
                    zipOut.closeEntry();
                } else {
                    zipOut.putNextEntry(new ZipEntry(fileName + "/"));
                    zipOut.closeEntry();
                }
                File[] children = fileToZip.listFiles();
                for (File childFile : children) {
                    zipFile(childFile, fileName + "/" + childFile.getName(), zipOut);
                }
                return;
            }
            FileInputStream fis = new FileInputStream(fileToZip);
            ZipEntry zipEntry = new ZipEntry(fileName);
            zipOut.putNextEntry(zipEntry);
            byte[] bytes = new byte[1024];
            int length;
            while ((length = fis.read(bytes)) >= 0) {
                zipOut.write(bytes, 0, length);
            }
            fis.close();
        }
    }
    

    package main;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipInputStream;
    
    public class UnzipFile {
    	public static File newFile(File destinationDir, ZipEntry zipEntry) throws IOException {
    	    File destFile = new File(destinationDir, zipEntry.getName());
    
    	    String destDirPath = destinationDir.getCanonicalPath();
    	    String destFilePath = destFile.getCanonicalPath();
    
    	    if (!destFilePath.startsWith(destDirPath + File.separator)) {
    	        throw new IOException("Entry is outside of the target dir: " + zipEntry.getName());
    	    }
    
    	    return destFile;
    	}
    	
    	public static void main(String[] args) throws IOException {
            String fileZip = "/Users/mac/eclipse-workspace/Java_76/dirCompressed.zip";
            File destDir = new File("/Users/mac/eclipse-workspace/Java_76/unzipTest");
            byte[] buffer = new byte[1024];
            ZipInputStream zis = new ZipInputStream(new FileInputStream(fileZip));
            ZipEntry zipEntry = zis.getNextEntry();
            while (zipEntry != null) {
                File newFile = newFile(destDir, zipEntry);
                if (zipEntry.isDirectory()) {
                    if (!newFile.isDirectory() && !newFile.mkdirs()) {
                        throw new IOException("Failed to create directory " + newFile);
                    }
                } else {
                    // fix for Windows-created archives
                    File parent = newFile.getParentFile();
                    if (!parent.isDirectory() && !parent.mkdirs()) {
                        throw new IOException("Failed to create directory " + parent);
                    }
                    
                    // write file content
                    FileOutputStream fos = new FileOutputStream(newFile);
                    int len;
                    while ((len = zis.read(buffer)) > 0) {
                        fos.write(buffer, 0, len);
                    }
                    fos.close();
                }
            zipEntry = zis.getNextEntry();
           }
            zis.closeEntry();
            zis.close();
        }
    }
    

    Không có nhận xét nào:

    Đăng nhận xét