0

在我的时区早上好。

我有以下代码:

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);

提前致谢最好的问候

4

2 回答 2

0

您可以使用

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

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

于 2013-10-25T10:22:56.283 回答
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
于 2013-10-25T09:39:32.137 回答