All Downloads are FREE. Search and download functionalities are using the official Maven repository.

anlavn.file.Zip Maven / Gradle / Ivy

package anlavn.file;
// Make By Bình An || AnLaVN || KatoVN

import anlavn.ui.DownloadPopup;
import java.io.BufferedOutputStream;
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;

/**Lớp Zip hỗ trợ giải nén tệp zip vào thư mục của bạn.
 * @author AnLaVN - https://github.com/AnLaVN
 */
public class Zip {
    private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
        byte[] bytesIn = new byte[16384];
        int read = 0;
        while ((read = zipIn.read(bytesIn)) != -1)   bos.write(bytesIn, 0, read);
        bos.close();
    }
    
    /**Sử dụng phương thức này để trích xuất một tệp .zip được chỉ định vào một thư mục được chỉ định.
     * @param zipFilePath là đường dẫn của tệp zip bạn muốn giải nén.
     * @param yourDirectory là đường dẫn của thư mục chứa các file sau khi giải nén.
     * Nó sẽ được tạo nếu không tồn tại, nếu bạn để trống thì thư mục gốc sẽ được chỉ định.
     */
    public static final void extract(String zipFilePath, String yourDirectory){
        try{Log.add("Zip - Start collecting information.");
            long totalBytesRead = 0, fileSize = 0;
            int index = zipFilePath.lastIndexOf("/");
            ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));
            ZipEntry entry = zipIn.getNextEntry();
            while (entry != null) {
                fileSize += entry.getSize();
                zipIn.closeEntry();
                entry = zipIn.getNextEntry();
            }
            String fileName = zipFilePath.substring(index < 0 ? 0 : index);
            Log.add("Zip - Collect information successfully:\n\t\tFile name \"" + fileName + "\", total size after extract " + fileSize + " bytes.");
            DownloadPopup dp = new DownloadPopup();
            dp.start("Extract " + fileName);
            if(yourDirectory == null || yourDirectory.equals("")) yourDirectory = new File("").getAbsolutePath();
            else {
                File destDir = new File(yourDirectory); 
                if (!destDir.exists())      destDir.mkdir();
            }
            zipIn = new ZipInputStream(new FileInputStream(zipFilePath));
            entry = zipIn.getNextEntry();
            while (entry != null) {
                String filePath = yourDirectory + File.separator + entry.getName();
                if (!entry.isDirectory())   extractFile(zipIn, filePath);
                else                        new File(filePath).mkdirs();
                totalBytesRead += entry.getSize();
                dp.setContent(totalBytesRead + " / " + fileSize + " bytes");
                dp.setValue((int) (totalBytesRead * 100 / fileSize));
                zipIn.closeEntry();
                entry = zipIn.getNextEntry();
            }
            dp.stop();
            Log.add("Zip - Extract zip file successfully:\n\t\tFile name \"" + zipFilePath +"\" at directory \"" + yourDirectory + "\"");
            zipIn.close();
        } catch(IOException e){
            Log.add("!!! Error try to extract zip file \"" + zipFilePath +"\" to \"" + yourDirectory + "\" directory. !!!\n\tError code: " + e.toString());
            throw new RuntimeException(e);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy