您的位置:首页 > 编程语言 > Java开发

java web中监听本地磁盘文件,并进行上传,复制,处理等

2017-10-12 13:44 411 查看
利用commons-io-2,5.jar实现对本地文件增删改的监听,代码如下:
/**
* 监听文件及文件夹的变化
* @author han
*/
public class FileAlterationListen extends FileAlterationListenerAdaptor {

public static String Reportname = "gsqxjb_risk_zyt_road";

public static String FileLocaltion = File.separator+"static"+File.separator+"pdf"+File.separator;

public File DirContext;

public FileAlterationListen(File dirContext) {
super();
DirContext = dirContext;
}

//文件夹创建
@Override
public void onDirectoryCreate(File directory) {
System.out.println(directory.getName()+" directory Create");
}
//文件夹改变
@Override
public void onDirectoryChange(File directory) {
System.out.println(directory.getName()+" directory Change");
}

//文件夹删除
@Override
public void onDirectoryDelete(File directory) {
System.out.println(directory.getName()+" directory Delete");
}

//文件创建
@Override
public void onFileCreate(File file) {
super.onFileCreate(file);
System.out.println("file create");
traverseFolder2(DirContext.getPath(),file.getName());
}

//文件夹改变
@Override
public void onFileChange(File file) {
super.onFileChange(file);
System.out.println("file change");
traverseFolder2(DirContext.getPath(),file.getName());
}

//文件删除
@Override
public void onFileDelete(File file) {
super.onFileDelete(file);
System.out.println(file.getName()+" file Delete");
}

public  void traverseFolder2(String path,String fileName) {

File file = new File(path);
if (file.exists()) {
File[] files = file.listFiles();
if (files.length == 0) {
return;
} else {
for (File file2 : files) {
if (file2.isDirectory()) {
traverseFolder2(file2.getAbsolutePath(),fileName);
} else {
if (fileName.equals(file2.getName())&&file2.getName().contains(Reportname)&&file2.getName().contains(".doc")) {
String name = file2.getName().substring(0, file2.getName().length()-4);
// 得到静态资源的相对地址
String Apath = FileAlterationListen.class.getClassLoader().getResource("").getPath().split("WEB-INF")[0].replaceAll("/", "\\\\"),subPath=Apath.substring(1, Apath.length());
File outFile = new File(subPath+FileLocaltion+name+".pdf");
WordToPdf(file2, outFile);
}
}
}
}
} else {
System.out.println("文件不存在!");
}
}

}


实现ServletContextListen接口,当容器启动时自动启动监听,代码如下(可以传入相应参数):
public class FileSystemListen implements ServletContextListener {

@Override
public void contextDestroyed(ServletContextEvent arg0) {

}

@Override
public void contextInitialized(ServletContextEvent arg0) {

File dir = new File("D:/jt_products");
FileAlterationMonitor monitor = new FileAlterationMonitor();

IOFileFilter filter = FileFilterUtils.or(FileFilterUtils.directoryFileFilter(),FileFilterUtils.fileFileFilter());

FileAlterationObserver observer = new FileAlterationObserver(dir,filter);
observer.addListener(new FileAlterationListen(dir));

monitor.addObserver(observer);
try {
//开始监听
monitor.start();
System.out.println("文件监听……");
} catch (Exception e) {
e.printStackTrace();
}
}

}


在web.xml中配置监听器,将上述监听器添加如下,demo下载:
<listener>
<listener-class>com.fwzx.service.FileSystemListen</listener-class>
</listener>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息