2017-03-04 140 views
0

我正在使用file.listFile()来列出指定路径中的文件和目录。我使用file.ListFile()的原因是因为如果用户只需要目录返回或只有文件,我正在使用FileFilter。但是我得到的结果是它只列出了指定路径中的文件夹和文件,而不是子文件夹和文件。这就是我与现在的工作:如何使用file.listFiles()列出子目录和文件

file = new File(directory.getText().trim()); 

// Used this for testing; ListFiles() is a method 
File[] test = ListFiles(directory.getName()); // I made up that will list the subfolders and files. 
results.setListData(test); // Also for testing. results is a JList 

// This is what i previously had that only lists folders and file in that directory 
results.setListData(file.listFiles(new Filter() { 
    public boolean accept(File file) { 
    if (directories.isSelected()) { 
     // Directories checkBox 
     if (files.isSelected()) { 
     // Files checkBox 
     // FILES && DIRECTORIES 
     return (file.isDirectory() || file.isFile()) && (StringUtils.contains(file.getName(), userInput.getText().trim())); 
     } 
     // DIRECTORIES 
     return (file.isDirectory()) && (StringUtils.contains(file.getName(), userInput.getText().trim())); 
     } else { 
     if (files.isSelected()) { 
      // FILES 
      return (file.isFile()) && (StringUtils.contains(file.getName(), userInput.getText().trim())); 
     } 
     } 
     return true; 
    } 
    })); 
} 

我只是不知道如何使用过滤器去参与

回答

0

File#listFiles()文档没有说明它走的所有子目录。所以,你需要自己做。对于从listFiles()返回的每个目录,您需要递归调用listFiles()

只要您将所有文件收集到另一个结构中,就可以在筛选器中执行此操作,因为您无法单独使用筛选器将更多文件添加到结果中。我不会建议你这样做。

你可能会更好免收过滤器,做这样的事情:

List<File> files = new ArrayList<>(); 

public void getFiles(File file) { 
    for (File file : file.listFiles()) { 
     if (file.isDirectory()) { 
      if (collectDirectories) { 
       files.add(file); 
      } 
      getFiles(file); 
     } else { 
      if (collectFiles) { 
       files.add(file); 
      } 
     } 
    } 
} 
+0

难道是容易没有过滤器内联,使其外部函数和调用'listFiles()'用的FileFilter函数作为参数? – Vince

+0

这并不能帮助你走完所有的子目录。看我的编辑。 – Jeremy

+0

我使用列表的唯一问题是,当我使用'results.setListData()'时,它需要一个'File []'而不是一个列表。 – Vince

相关问题