2017-03-04 2 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

이 필터 인라인이없는 것이 더 쉽습니다을하고 FileFilter를 함께') (때 listFiles'전화 매개 변수로 기능? – Vince

+0

그게 모든 하위 디렉토리를 걷는 데 도움이되지는 않습니다. 내 편집을 참조하십시오. – Jeremy

+0

리스트를 사용하는 유일한 문제는'results.setListData()'를 사용할 때리스트가 아닌'File []'이 필요하다는 것입니다. – Vince

관련 문제