克隆迭代器FileUtils

时间:2013-10-25 09:31:48

标签: java iterator fileutils

我的时区早安。

我有以下代码:

Iterator<File> files = FileUtils.iterateFiles(new File(directoryPath), new String[]{"java"}, true);

        for(String file : ws){
            while(files.hasNext()){
                current = files.next();
                if(!current.isDirectory()){
                    if(current.getName().matches(file+".*ServiceProxy.*")){
        //I need to start the cycle again from the beginning to search in each
    //file for the ServiceProxy string
    //Something like this
            // cloneFiles = files.clone();
         //while(cloneFiles.hasNext()){
              file = files.next();
              //search inside the file code
         }
                    }
                }
            }   
        }

我想克隆Iterator,因为这个动作在时间上非常昂贵

FileUtils.iterateFiles(new File(directoryPath), new String[]{"java"}, true);

提前致谢 最好的问候

2 个答案:

答案 0 :(得分:0)

您可以使用Iterable

Iterable<File> filesIterable = new Iterable<>(){
    public Iterator<File> iterator() {
        return FileUtils.iterateFiles(...);
    }
};

...

for (File file : filesIterable) {
    ...
}

// ... and you may reuse it over and over. 
// For each cycle declaration there will be a new `Iterator` created.

for (File file : filesIterable) {
    ...
}

它的工作原理如下:

  1. for-each循环要求filesIterable创建新的Iterator
  2. filesIterable来电iterator()
  3. FileUtils.iterateFiles创建新的Iterator

答案 1 :(得分:0)

您可以使用

Collection<File> files = FileUtils.listFiles(new File(directoryPath), 
    new String[]{"java"}, true);

创建文件集合,然后重复使用它以进行进一步迭代。这样,每次要迭代文件时,它都不会扫描根文件夹。