java监听文件夹
如果JDK是java7,那么可以使用WatchService,这个提供了非常底层的实现。
如果非要自己实现一个.建议使用java.util.Timer 类或者线程,定时执行文件检查任务
下面比较啰嗦和简陋的实现了需求,简单的测试了,但不保证没有bug,仅作参考
importjava.io.File;
importjava.io.IOException;
importjava.util.ArrayList;
publicclassFindNewFile{
publicstaticvoidmain(String[]args){
while(true){
Stringpath="c:\";//路径
Filefile=newFile(path);
File[]files=file.listFiles();
ArrayList<File>list=newArrayList<File>();//文件对象存到list里
for(inti=0;i<files.length;i++){
list.add(files[i]);
}
try{
Thread.sleep(5000);//暂停5000毫秒
}catch(InterruptedExceptione){
e.printStackTrace();
}
Filefile2=newFile(path);
File[]files2=file2.listFiles();
ArrayList<File>list2=newArrayList<File>();
for(inti=0;i<files2.length;i++){
list2.add(files2[i]);
}
if(list2.size()>list.size()){
list2.removeAll(list);//用后来的文件夹对象减去之前的对象,
for(inti=0;i<list2.size();i++){
try{
System.out.println(list2.get(i).getCanonicalPath());
}catch(IOExceptione){
e.printStackTrace();
}
}
}else{
continue;
}
}
}
}
输出
C:新建公文包
C:新建MicrosoftPublisher文档.pub
基本实现了对新增文件的输出文件名
Ⅱ java可以实现监听文件夹内的文件变动吗
可以自己写定时任务,或者用现成的包。commons-io-2.3.jar 中,有实现文件监控的类。
可以学习这个:
http://blog.csdn.net/masternick/article/details/12197141
http://blog.csdn.net/u012083681/article/details/20689381
Ⅲ java 监听指定目录,有没有新增的文件
使用 commons-io 中的文件监控
package org.demo.file;
import java.util.concurrent.TimeUnit;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
/**
* 文件监控测试
* @author
* @date 2010-11-16
* @file org.demo.file.FileMonitor.java
*/
public class FileMonitorTest {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// 监控目录
String rootDir = "d:\\Temp";
// 轮询间隔 5 秒
long interval = TimeUnit.SECONDS.toMillis(5);
//
FileAlterationObserver observer = new FileAlterationObserver(
rootDir,
FileFilterUtils.and(
FileFilterUtils.fileFileFilter(),
FileFilterUtils.suffixFileFilter(".java")),
null);
observer.addListener(new MyFileListener());
FileAlterationMonitor monitor = new FileAlterationMonitor(interval,observer);
// 开始监控
monitor.start();
}
Ⅳ Java 如何监控文件目录的变化
JavaSE 1.7提供了相关的API,去监视文件或者文件夹的变动,主要的API都在java.nio.file下面,其大概流程如下:
packageorg.xdemo.superutil.j2se.filewatch;
importstaticjava.nio.file.LinkOption.NOFOLLOW_LINKS;
importjava.io.File;
importjava.io.IOException;
importjava.nio.file.FileSystems;
importjava.nio.file.FileVisitResult;
importjava.nio.file.Files;
importjava.nio.file.Path;
importjava.nio.file.Paths;
importjava.nio.file.SimpleFileVisitor;
importjava.nio.file.StandardWatchEventKinds;
importjava.nio.file.WatchEvent;
importjava.nio.file.WatchEvent.Kind;
importjava.nio.file.WatchKey;
importjava.nio.file.WatchService;
importjava.nio.file.attribute.BasicFileAttributes;
importjava.util.HashMap;
importjava.util.Map;
/**
*文件夹监控
*
*@authorGoofy<ahref="http://www.xdemo.org/">http://www.xdemo.org/</a>
*@Date2015年7月3日上午9:21:33
*/
publicclassWatchDir{
;
privatefinalMap<WatchKey,Path>keys;
privatefinalbooleansubDir;
/**
*构造方法
*
*@paramfile
*文件目录,不可以是文件
*@paramsubDir
*@throwsException
*/
publicWatchDir(Filefile,booleansubDir,FileActionCallbackcallback)throwsException{
if(!file.isDirectory())
thrownewException(file.getAbsolutePath()+"isnotadirectory!");
this.watcher=FileSystems.getDefault().newWatchService();
this.keys=newHashMap<WatchKey,Path>();
this.subDir=subDir;
Pathdir=Paths.get(file.getAbsolutePath());
if(subDir){
registerAll(dir);
}else{
register(dir);
}
processEvents(callback);
}
@SuppressWarnings("unchecked")
static<T>WatchEvent<T>cast(WatchEvent<?>event){
return(WatchEvent<T>)event;
}
/**
*观察指定的目录
*
*@paramdir
*@throwsIOException
*/
privatevoidregister(Pathdir)throwsIOException{
WatchKeykey=dir.register(watcher,StandardWatchEventKinds.ENTRY_CREATE,StandardWatchEventKinds.ENTRY_DELETE,StandardWatchEventKinds.ENTRY_MODIFY);
keys.put(key,dir);
}
/**
*观察指定的目录,并且包括子目录
*/
privatevoidregisterAll(finalPathstart)throwsIOException{
Files.walkFileTree(start,newSimpleFileVisitor<Path>(){
@Override
(Pathdir,BasicFileAttributesattrs)throwsIOException{
register(dir);
returnFileVisitResult.CONTINUE;
}
});
}
/**
*发生文件变化的回调函数
*/
@SuppressWarnings("rawtypes")
voidprocessEvents(FileActionCallbackcallback){
for(;;){
WatchKeykey;
try{
key=watcher.take();
}catch(InterruptedExceptionx){
return;
}
Pathdir=keys.get(key);
if(dir==null){
System.err.println("操作未识别");
continue;
}
for(WatchEvent<?>event:key.pollEvents()){
Kindkind=event.kind();
//事件可能丢失或遗弃
if(kind==StandardWatchEventKinds.OVERFLOW){
continue;
}
//目录内的变化可能是文件或者目录
WatchEvent<Path>ev=cast(event);
Pathname=ev.context();
Pathchild=dir.resolve(name);
Filefile=child.toFile();
if(kind.name().equals(FileAction.DELETE.getValue())){
callback.delete(file);
}elseif(kind.name().equals(FileAction.CREATE.getValue())){
callback.create(file);
}elseif(kind.name().equals(FileAction.MODIFY.getValue())){
callback.modify(file);
}else{
continue;
}
//ifdirectoryiscreated,andwatchingrecursively,then
//registeritanditssub-directories
if(subDir&&(kind==StandardWatchEventKinds.ENTRY_CREATE)){
try{
if(Files.isDirectory(child,NOFOLLOW_LINKS)){
registerAll(child);
}
}catch(IOExceptionx){
//ignoretokeepsamplereadbale
}
}
}
booleanvalid=key.reset();
if(!valid){
//移除不可访问的目录
//因为有可能目录被移除,就会无法访问
keys.remove(key);
//如果待监控的目录都不存在了,就中断执行
if(keys.isEmpty()){
break;
}
}
}
}
}
Ⅳ java中JFileChooser选择文件时,能不能监听文件夹的改变
voidaddChoosableFileFilter(FileFilter filter)
void setFileFilter(FileFilter filter) Sets the current file filter.
voidaddActionListener(ActionListener l)
Adds an ActionListener to the file chooser.
Ⅵ java如何在linux下监听某个目录下是否有文件改变
JDK 7 的nio2 WatchService可以监听文件系统。
Oracle官方教程链接 http://docs.oracle.com/javase/tutorial/essential/io/notification.html
样例代码:
importstaticjava.nio.file.StandardWatchEventKinds.*;
Pathpath=Paths.get("/home");
WatchServicewatchService=FileSystems.getDefault().newWatchService();
WatchKeywatchKey=path.register(watchService,ENTRY_CREATE,ENTRY_DELETE,ENTRY_MODIFY);
/*
privatebooleannotDone=true;
while(notDone){
try{
WatchKeywatchKey=watchService.poll(60,TimeUnit.SECONDS);
List<WatchEvent.Kind<?>>events=watchKey.pollEvents();
for(WatchEventevent:events){
//.register
PathwatchedPath=(Path)watchKey.watchable();
//returnstheeventtype
=event.kind();
//returnsthecontextoftheevent
Pathtarget=(Path)event.context();
}
if(!watchKey.reset()){
...handlesituationnolongervalid
}
}catch(InterruptedExceptione){
Thread.currentThread().interrupt();
}
}
*/
Ⅶ 用java编写 启动一个线程,每隔一秒扫描一个指定的文件夹,监听文件是删除操作还是新建操作,(本
程序写起来倒是不难 不过有个问题瑶瑶弄清楚,如果重命名不考虑的话:
如果该文件夹下原来有5个文件我新增了两个,删除了一个,按照你的说法是新增了1个,这种情况不用考虑吗?
恢复了 马上给你实现
Ⅷ java如何实现监视一个文件夹变化
靠后缀名是不行的,文件传输过程中,你本地文件系统已经穿件了该文件,是包含后缀的。
可以考虑使用文件大小, File.getTotalSpace(); 和File.lastModified() 来辅助判断。
Ⅸ java实时监控局域网共享文件夹并复制文件到指定位置
首先要保证电脑A和电脑B网络可到达
然后在java里用一个线程(死循环)一直“监控”电脑A里的共享文件夹的大小 只要一有变化就让电脑A里的共享文件夹下的所有文件复制一份到电脑B的共享文件夹下 然后把电脑A里的共享文件夹下的文件删除