zoukankan      html  css  js  c++  java
  • 文件夹变化监听

    publicclassRecursiveFileObserverextendsFileObserver{
            /** Only modification events */
            publicstaticint CHANGES_ONLY = CREATE | DELETE | CLOSE_WRITE | MOVE_SELF | MOVED_FROM | MOVED_TO;
           
            List<SingleFileObserver> mObservers;
            String mPath;
            int mMask;
     
            publicRecursiveFileObserver(String path){
                    this(path, ALL_EVENTS);
            }
           
            publicRecursiveFileObserver(String path,int mask){
                    super(path, mask);
                    mPath = path;
                    mMask = mask;
            }
     
            @Override
            publicvoid startWatching(){
                    if(mObservers !=null)return;
                   
                    mObservers =newArrayList<SingleFileObserver>();
                    Stack<String> stack =newStack<String>();
                    stack.push(mPath);
                   
                    while(!stack.isEmpty()){
                            String parent = stack.pop();
                            mObservers.add(newSingleFileObserver(parent, mMask));
                            File path =newFile(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
            publicvoid stopWatching(){
                    if(mObservers ==null)return;
                   
                    for(SingleFileObserver sfo : mObservers){
                            sfo.stopWatching();
                    }
                    mObservers.clear();
                    mObservers =null;
            }
     
            @Override
            publicvoid onEvent(int event,String path){
                    switch(event)
                    {
                    caseFileObserver.ACCESS:
                            Log.i("RecursiveFileObserver","ACCESS: "+ path);
                            break;
                    caseFileObserver.ATTRIB:
                            Log.i("RecursiveFileObserver","ATTRIB: "+ path);
                            break;
                    caseFileObserver.CLOSE_NOWRITE:
                            Log.i("RecursiveFileObserver","CLOSE_NOWRITE: "+ path);
                            break;
                    caseFileObserver.CLOSE_WRITE:
                            Log.i("RecursiveFileObserver","CLOSE_WRITE: "+ path);
                            break;
                    caseFileObserver.CREATE:
                            Log.i("RecursiveFileObserver","CREATE: "+ path);
                            break;
                    caseFileObserver.DELETE:
                            Log.i("RecursiveFileObserver","DELETE: "+ path);
                            break;
                    caseFileObserver.DELETE_SELF:
                            Log.i("RecursiveFileObserver","DELETE_SELF: "+ path);
                            break;
                    caseFileObserver.MODIFY:
                            Log.i("RecursiveFileObserver","MODIFY: "+ path);
                            break;
                    caseFileObserver.MOVE_SELF:
                            Log.i("RecursiveFileObserver","MOVE_SELF: "+ path);
                            break;
                    caseFileObserver.MOVED_FROM:
                            Log.i("RecursiveFileObserver","MOVED_FROM: "+ path);
                            break;
                    caseFileObserver.MOVED_TO:
                            Log.i("RecursiveFileObserver","MOVED_TO: "+ path);
                            break;
                    caseFileObserver.OPEN:
                            Log.i("RecursiveFileObserver","OPEN: "+ path);
                            break;
                    default:
                            Log.i("RecursiveFileObserver","DEFAULT("+ event +"): "+ path);
                            break;
                    }
            }
           
            /**
             * Monitor single directory and dispatch all events to its parent, with full path.
             * @author              uestc.Mobius <mobius@toraleap.com>
             * @version     2011.0121
             */
            classSingleFileObserverextendsFileObserver{
                    String mPath;
                   
                    publicSingleFileObserver(String path){
                            this(path, ALL_EVENTS);
                            mPath = path;
                    }
                   
                    publicSingleFileObserver(String path,int mask){
                            super(path, mask);
                            mPath = path;
                    }
     
                    @Override
                    publicvoid onEvent(int event,String path){
                            String newPath = mPath +"/"+ path;
                            RecursiveFileObserver.this.onEvent(event, newPath);
                    }
            }

    }

    注意:
    1、必须保持FileObserver的引用才能监听文件,因此最好放到service中,并且把引用都保存起来;
    2、FileObserver需要给每个文件夹设置监听器,因为它自己不能递归监听。

  • 相关阅读:
    Python开发之路-多进程、进程队列、事件驱动模型、IO模型前戏
    Python开发之路
    cookies,sessionstorage,localstorage的区别?
    Linux的nmon监控结果分析文件中网络分析NET
    长字符串写法
    go中语句为什么不用加分号;结束
    %v的使用
    设计模式--装饰器模式
    第一类值VS第二类值
    闭包
  • 原文地址:https://www.cnblogs.com/lyz459/p/3345660.html
Copyright © 2011-2022 走看看