0

file.listFile()用来列出指定路径中的文件和目录。我使用的原因file.ListFile()是因为我使用的是基于用户只希望返回目录还是只希望文件的 FileFilter。但是我得到的结果是它只列出了指定路径中的文件夹和文件,而不是子文件夹和文件。这就是我现在正在使用的:

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

我只是不确定如何处理所涉及的过滤器

4

2 回答 2

0

我发现所有带有子目录的 FileNameFilter 东西有点复杂。我现在用这个:

  <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-io</artifactId>
        <version>1.3.2</version>
        <type>jar</type>
   </dependency>

   File inputDir = new File(inputPath.toString());
   Iterator<File> matchesIterator = FileUtils.iterateFiles(
            inputDir, new WildcardFileFilter("somefilenamefilter*.xml"), TrueFileFilter.TRUE);
        while (matchesIterator.hasNext()) {
            File someFile = matchesIterator .next();
             ...
        } 
于 2019-12-27T15:21:37.967 回答
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);
            }
        }
    }
}
于 2017-03-04T04:52:05.503 回答