<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 262,  comments - 221,  trackbacks - 0
    【一】DirectoryWalker介紹

    在日常的操作中,我們經常需要對某個目錄下的資源進行遍歷。比如說:遍歷工程目錄,找出所有.svn的目錄并進行刪除。這時我們如果使用前面的File filter,將不能做到遞歸的效果。于是Apache commons IO提供了一個用于遍歷目錄進行操作的抽象類:DirectoryWalker。

    Abstract class that walks through a directory hierarchy and provides subclasses with convenient hooks to add specific behaviour.

    This class operates with a FileFilter and maximum depth to limit the files and direcories visited. Commons IO supplies many common filter implementations in the filefilter package.

    【二】DirectoryWalker實戰

    在這個類的API中,作者演示了如何使用這個類來刪除指定目錄下的所有文件和.svn目錄,并返回已刪除的文件

    public class FileCleaner extends DirectoryWalker {

     
    public FileCleaner() {
          
    super();
        }


     
    public List clean(File startDirectory) {
          List results 
    = new ArrayList();
          walk(startDirectory, results);
          
    return results;
        }


        
    protected boolean handleDirectory(File directory, int depth, Collection results) {
          
    // delete svn directories and then skip
          if (".svn".equals(directory.getName())) {
              directory.delete();
             
    return false;
          }
     else {
             
    return true;
          }


        }


        
    protected void handleFile(File file, int depth, Collection results) {
          
    // delete file and add to list of deleted
            file.delete();
            results.add(file);
        }

      }

    要使用DirectoryWalker來遍歷一個目錄并進行相應的操作,步驟如下:

    ①創建一個繼續于DirectoryWalker的類,并在構造方法中調用super();
    ②定義一個業務入口方法,例如clean。在這個方法中調用walk方法
    ③覆蓋DirectoryWalker類的handleDirectory方法,提供相應的處理邏輯
    ④覆蓋DirectoryWalker類的handleFile方法,提供相應的處理邏輯

    其中的關鍵在于walk方法,這個方法指定了入口的路徑,并提供一個用于接收處理結果的參數。在這個方法的內部,它遞歸地對每一個目錄對象調用handleDirectory方法,對于每一個文件對象調用handleFile方法。

    private void walk(File directory, int depth, Collection results) throws IOException {
            checkIfCancelled(directory, depth, results);
            
    if (handleDirectory(directory, depth, results)) {
                handleDirectoryStart(directory, depth, results);
                
    int childDepth = depth + 1;
                
    if (depthLimit < 0 || childDepth <= depthLimit) {
                    checkIfCancelled(directory, depth, results);
                    File[] childFiles 
    = (filter == null ? directory.listFiles() : directory.listFiles(filter));
                    
    if (childFiles == null{
                        handleRestricted(directory, childDepth, results);
                    }
     else {
                        
    for (int i = 0; i < childFiles.length; i++{
                            File childFile 
    = childFiles[i];
                            
    if (childFile.isDirectory()) {
                                walk(childFile, childDepth, results);
                            }
     else {
                                checkIfCancelled(childFile, childDepth, results);
                                handleFile(childFile, childDepth, results);
                                checkIfCancelled(childFile, childDepth, results);
                            }

                        }

                    }

                }

                handleDirectoryEnd(directory, depth, results);
            }

            checkIfCancelled(directory, depth, results);
        }


    -------------------------------------------------------------
    生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
    posted on 2010-03-09 00:26 Paul Lin 閱讀(3531) 評論(1)  編輯  收藏 所屬分類: J2SE


    FeedBack:
    # re: 【Java基礎專題】IO與文件讀寫---使用Apache commons IO包進行資源遍歷
    2010-03-11 14:48 | swinging
    super()會被子類自動調用,不一定要顯示表示  回復  更多評論
      
    <2010年3月>
    28123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(21)

    隨筆分類

    隨筆檔案

    BlogJava熱點博客

    好友博客

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 最近2019中文免费字幕| 国产一区在线观看免费| 免费国产成人午夜在线观看| 日韩精品内射视频免费观看 | 看Aⅴ免费毛片手机播放| 97超高清在线观看免费视频| 色影音免费色资源| 亚洲午夜无码AV毛片久久| 亚洲啪啪免费视频| 久久精品国产免费一区| 久久久久亚洲精品美女| 国产产在线精品亚洲AAVV| 国产成人精品免费直播| 亚洲人成77777在线观看网| 免费视频一区二区| 亚洲国产精品第一区二区| 免费无码午夜福利片| **毛片免费观看久久精品| 中文字幕不卡亚洲| 小说专区亚洲春色校园| 成人毛片18女人毛片免费96| 亚洲精品第一国产综合亚AV| 成人免费一级毛片在线播放视频| 亚洲va中文字幕无码久久不卡| 羞羞视频在线观看免费| 国产成人免费全部网站| 九九全国免费视频| 免费h黄肉动漫在线观看| 亚洲中文无码永久免费| 无码人妻久久一区二区三区免费丨 | 三级网站免费观看| 亚洲精品第五页中文字幕| 两个人看www免费视频| 97久久精品亚洲中文字幕无码 | 97碰公开在线观看免费视频| 久久精品国产亚洲AV未满十八 | 99久久精品日本一区二区免费| 久久亚洲精品高潮综合色a片| 亚洲欧洲免费无码| 成人午夜免费视频| 亚洲综合久久成人69|