平时能用到文件的监听,通过文件的变化实现对文件内容的处理,多了不说。看下面代码,很容易看懂。(包没有引用)
public class FileObserverDemo extends FileObserver {
/** 监听事件 */
public static int CHANGES_ONLY = CREATE | DELETE | CLOSE_WRITE | MOVE_SELF
| MOVED_FROM | MOVED_TO;
public static final int CREATE_DIRECTORY = 0x40000100;
public static final int DELETE_DIRECTORY = 0x40000200;
private static final byte[] LockFileList = new byte[0];
private Context context;
List<SingleFileObserver> mObservers;
String mPath;
int mMask;
public FileObserverDemo(String path) {
this(path, ALL_EVENTS);
}
public FileObserverDemo(String path, int mask) {
super(path, mask);
mPath = path;
mMask = mask;
}
@Override
public void startWatching() {
if (mObservers != null)
return;
//建立堆栈开启监听判断
mObservers = new ArrayList<SingleFileObserver>();
Stack<String> stack = new Stack<String>();
stack.push(mPath);
while (!stack.isEmpty()) {
String parent = stack.pop();
mObservers.add(new SingleFileObserver(parent, mMask));
File path = new File(parent);
File[] files = path.listFiles();
if (null == files)
continue;
for (File f : files) {
if (f.isDirectory() && !f.getName().equals(".")
&& !f.getName().equals("..")) {
stack.push(f.getPath());
}
}
}
for (SingleFileObserver sfo : mObservers) {
sfo.startWatching();
}
}
@Override
public void stopWatching() {
if (mObservers == null)
return;
for (SingleFileObserver sfo : mObservers) {
sfo.stopWatching();
}
mObservers.clear();
mObservers = null;
}
@Override
public void onEvent(int event, String path) {
}
class SingleFileObserver extends FileObserver {
String mPath;
public SingleFileObserver(String path) {
this(path, ALL_EVENTS);
mPath = path;
}
public SingleFileObserver(String path, int mask) {
super(path, mask);
mPath = path;
}
@Override
public void onEvent(int event, String path) {
Log.i("info", "SingleFileObserver:" + mPath + "/" + path);
FileObserverDemo.this.onEvent(event, mPath + "/" + path);
}
}
}
通过调用FileObserverDemo fod=null;
fod= new RecursiveFileObserver("获取文件路径");
fod.startWatching();
实现文件监听
java文件监听的实现(1)
最新推荐文章于 2024-03-25 16:40:44 发布