本帖最后由 chenquanyi626 于 2018-11-20 19:18 编辑
java代码监控目录并解压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();
}
} ============================= ============================= ============================= =============================
|