<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熱點博客

    好友博客

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲www在线观看| 亚洲国产日产无码精品| 亚洲成人在线免费观看| 一本色道久久88—综合亚洲精品 | 18禁成人网站免费观看| 亚洲国产美女精品久久久| 久久精品亚洲一区二区| 日韩特黄特色大片免费视频| 无码精品国产一区二区三区免费 | 88xx成人永久免费观看| 日日躁狠狠躁狠狠爱免费视频 | 久久久久国产免费| 又大又硬又粗又黄的视频免费看| 亚洲综合久久久久久中文字幕| 高清在线亚洲精品国产二区| 最近2019中文字幕免费看最新| 久久99精品免费视频| 又硬又粗又长又爽免费看 | 亚洲国产主播精品极品网红 | 亚洲人成人77777在线播放| 亚洲免费在线视频| 久久精品a亚洲国产v高清不卡 | 曰批免费视频播放免费| 久久亚洲AV成人无码国产最大| 亚洲精品国产福利片| 亚洲精品中文字幕乱码| 亚洲a级在线观看| 亚洲伊人久久大香线蕉| 亚洲欧美国产精品专区久久| 亚洲Aⅴ在线无码播放毛片一线天| 一级中文字幕免费乱码专区| 成人免费黄色网址| 国产在线观看免费观看不卡| 欧美a级成人网站免费| 成人人免费夜夜视频观看| 亚洲人午夜射精精品日韩| 亚洲AV无码专区国产乱码电影 | 午夜性色一区二区三区免费不卡视频 | 一级做α爱过程免费视频| a级毛片高清免费视频| 无限动漫网在线观看免费 |