1. 程式人生 > >Java 複製zip檔案到指定目錄並解壓zip檔案

Java 複製zip檔案到指定目錄並解壓zip檔案

過程中使用apache的ant jar包 apache-ant-1.8.2.jar 

示例程式碼如下:


import org.apache.log4j.Logger;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileHelpUtils {

    /** The Constant LOG. */
    private static final Logger LOG = Logger.getLogger(FileHelpUtils.class);
    // 拷貝檔案到指定目錄
    public static void backupFile(final File srcFile, String copyPath )
    {

        if (srcFile == null)
        {
            LOG.error("backSuccess process, source is null!");
            return;
        }

        File typeFolder = new File(copyPath);
        if (typeFolder.exists())
        {
            LOG.info("      check  folder exists! (" + copyPath + ")");
        }else{
            LOG.info("      create folder (" + copyPath + ")...");
            typeFolder.mkdir();
            LOG.info("      create folder (" + copyPath + ") end, check exists:" + typeFolder.exists());
        }

        //Folder: date
        String version = new SimpleDateFormat("yyyyMMdd").format(new Date());
        final String strDestDirectory = copyPath + File.separator +version;
        final File destFolder = new File(strDestDirectory);
        if (destFolder.exists())
        {
            LOG.info("      check  folder exists! (" + strDestDirectory + ") ");
        }else{
            LOG.info("      create folder (" + strDestDirectory + ")...");
            destFolder.mkdir();
            LOG.info("      create folder (" + strDestDirectory + ") end, check exists:" + destFolder.exists());
        }

        //file name
        final String fileName = srcFile.getName();
        //{destDirectory}/{fileName}
        final String destFilePath = strDestDirectory + File.separator + fileName;

        //    Move file
        final File destFile = new File(destFilePath);
        if (destFile.exists())
        {
            LOG.info(" Delete old file : " + destFilePath + "!");
            destFile.delete();
        }

        // NEW strategy to avoid move file failure
        reNameFile(srcFile, destFile);
    }

    public static boolean reNameFile(File oldname, File newname){
        try{
            // copy file
            org.apache.commons.io.FileUtils.copyFile(oldname, newname);
            LOG.info(" [OK] Copy file from " + oldname.getPath() + " ----> " + newname + " !");
            // delete file
            if(oldname.delete()){
                LOG.info(" [OK] Delete source file:" + oldname.getPath() + " !");
            }
        }catch(IOException ioex){
            LOG.error(" [KO] Copy file path: " + oldname.getPath() + ". error:" + ioex.getMessage());
            return false;
        }
        return true;
    }
}
/**
 * 解壓zip
 */
public static void decompress(String srcPath) throws Exception {

    final File folderToScan = new File(srcPath);
    final File[] targetFiles = folderToScan.listFiles();

    for (File file : targetFiles) {
        if(!file.getName().endsWith("zip")){
            continue;
        }

        ZipFile zf = new ZipFile(file);

        Enumeration entries = zf.getEntries();

        ZipEntry entry = null;

        while (entries.hasMoreElements()) {

            entry = (ZipEntry) entries.nextElement();

          LOG.info("compress the file: " + entry.getName());

                // 表示檔案
                File f = new File(srcPath+File.separator+entry.getName());

                if (!f.exists()) {

                    File parentDir = new File(srcPath);

                    parentDir.mkdirs();
                }
                f.createNewFile();

                // 將壓縮檔案內容寫入到這個檔案中

                InputStream is = zf.getInputStream(entry);

                FileOutputStream fos = new FileOutputStream(f);

                int count;

                byte[] buf = new byte[8192];

                while ((count = is.read(buf)) != -1) {

                    fos.write(buf, 0, count);

                }
                is.close();

                fos.close();
            }

        }

}