A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 chenquanyi626 于 2018-11-20 19:18 编辑

java代码监控目录并解压zip文件到指定目录
一、zip解压功能
[Java] 纯文本查看 复制代码
package cn.itcast.ziputil;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

/**
 * 〈zip解压功能〉<br>
 * 〈〉
 *
 * @author chenq
 * @create 2018/11/19
 * @since 1.0.0
 */
public class ZipUtil {
    private static final int  BUFFER_SIZE = 2 * 1024;
    /**
     * zip解压
     * @param srcFile        zip源文件
     * @param destDirPath     解压后的目标文件夹
     * @throws RuntimeException 解压失败会抛出运行时异常
     */
    public void unZip(File srcFile, String destDirPath) throws RuntimeException {
        long start = System.currentTimeMillis();

        // 判断源文件是否存在
        //if(srcFile.exists()){
            //throw new RuntimeException(srcFile.getPath() + "所指文件不存在");
        //}
        ZipFile zipFile = null;
        try{
            zipFile = new ZipFile(srcFile);
            Enumeration<?> entries = zipFile.entries();
            while (entries.hasMoreElements()) {
                ZipEntry entry = (ZipEntry) entries.nextElement();
                System.out.println("解压" + entry.getName());
                // 如果是文件夹,就创建个文件夹
                if (entry.isDirectory()) {
                    String dirPath = destDirPath + "/" + entry.getName();
                    File dir = new File(dirPath);
                    dir.mkdirs();
                }else {
                    // 如果是文件,就先创建一个文件,然后用io流把内容copy过去
                    File targetFile = new File(destDirPath + "/" + entry.getName());
                    // 保证这个文件的父文件夹必须要存在
                    if(!targetFile.getParentFile().exists()){
                        targetFile.getParentFile().mkdirs();
                    }
                    targetFile.createNewFile();
                    // 将压缩文件内容写入到这个文件中
                    InputStream is = zipFile.getInputStream(entry);
                    FileOutputStream fos = new FileOutputStream(targetFile);
                    int len;
                    byte[] buf = new byte[BUFFER_SIZE];
                    while ((len = is.read(buf)) != -1) {
                        fos.write(buf, 0, len);
                    }
                    // 关流顺序,先打开的后关闭
                    fos.close();
                    is.close();
                }
            }
            long end = System.currentTimeMillis();
            System.out.println("解压完成,耗时:" + (end - start) +" ms");
        }catch (Exception e){
            throw new RuntimeException("unzip error from ZipUtils", e);
        }finally {
            if(zipFile != null){
                try {
                    zipFile.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

二、监听目录
[Java] 纯文本查看 复制代码
package cn.itcast.listener;

import cn.itcast.ziputil.ZipUtil;
import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationObserver;

import java.io.File;

/**
 * 〈监听目录〉<br> 
 * 〈〉
 *
 * @author chenquanyi
 * @create 2018/11/19
 * @since 1.0.0
 */
public class ReYoFileListener implements FileAlterationListener {

    @Override
    public void onStart(FileAlterationObserver fileAlterationObserver) {
        //System.out.println("onStart");
    }

    @Override
    public void onDirectoryCreate(File directory) {
        System.out.println("onDirectoryCreate :"+directory.getName());
    }

    @Override
    public void onDirectoryChange(File directory) {
        System.out.println("onDirectoryChange :"+directory.getName());
    }

    @Override
    public void onDirectoryDelete(File directory) {
        System.out.println("onDirectoryDelete :"+directory.getName());
    }

    @Override
    public void onFileCreate(File file) {
        System.out.println("onFileCreate :"+file.getName());
        String fileName = file.getName();
        String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
        if ("zip".equals(suffix)){
            //destDirPath 解压到目标文件夹路径
            new ZipUtil().unZip(file,"G:\\tempp");
        }
    }

    @Override
    public void onFileChange(File file) {
        System.out.println("onFileChange :"+file.getName());
    }

    @Override
    public void onFileDelete(File file) {
        System.out.println("onFileDelete :"+file.getName());
    }

    @Override
    public void onStop(FileAlterationObserver fileAlterationObserver) {
        //System.out.println("onStop");
    }
}

三、测试代码
[Java] 纯文本查看 复制代码
package cn.itcast.monitor;

import cn.itcast.listener.ReYoFileListener;
import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;

import java.io.File;

/**
 * <br> 
 * 〈〉
 *
 * @author chenquanyi
 * @create 2018/11/19
 * @since 1.0.0
 */
public class ReYoFileMonitor {
    FileAlterationMonitor monitor = null;
     public ReYoFileMonitor(Long interval)throws Exception{
         monitor  = new FileAlterationMonitor(interval);

     }
     public void moniter(String path, FileAlterationListener listener){
         FileAlterationObserver observer = new FileAlterationObserver(new File(path));
         monitor.addObserver(observer);
         observer.addListener(listener);
     }

     public void stop() throws Exception{
         monitor.stop();
     }
     public void start() throws Exception{
         monitor.start();
     }

    public static void main(String[] args) throws Exception {
        ReYoFileMonitor m = new ReYoFileMonitor(5000L);
        // path监控文件夹的路径
        m.moniter("G:\\temp",new ReYoFileListener());
        m.start();
    }
}
=============================
=============================
=============================
=============================




1 个回复

倒序浏览
ヾ(◍°∇°◍)ノ゙
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马