2017-03-04 3 views
0

J'utilise file.listFile() pour lister les fichiers et les répertoires dans un chemin spécifié. La raison pour laquelle j'utilise file.ListFile() est parce que j'utilise un FileFilter basé sur si l'utilisateur veut que les répertoires retournent ou seulement les fichiers. Mais le résultat que j'ai est qu'il liste seulement les dossiers et les fichiers dans le chemin spécifié et pas les sous-dossiers et les fichiers. C'est ce que je travaille en ce moment avec:Comment puis-je utiliser file.listFiles() pour lister les sous-répertoires et fichiers

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

Je ne suis pas sûr de savoir comment s'y prendre avec les filtres impliqué

Répondre

0

La documentation File#listFiles() ne dit pas qu'il marche tous les sous-répertoires. Donc, vous devrez le faire vous-même. Pour chaque répertoire renvoyé par listFiles(), vous devez appeler récursivement le listFiles().

Vous pouvez le faire dans le filtre, tant que vous collectez tous vos fichiers dans une autre structure, car vous ne pouvez pas ajouter plus de fichiers au résultat en utilisant uniquement le filtre. Et je ne te recommanderais pas de faire ça.

Vous pourriez être mieux renoncer au filtre et faire quelque chose comme ceci:

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

Serait-il plus facile de ne pas avoir la ligne de filtre, en font une fonction en dehors et appeler 'ListFiles()' la FileFilter fonctionne comme un paramètre? – Vince

+0

Cela ne vous aide pas à parcourir tous les sous-répertoires. Voir ma modification. – Jeremy

+0

Le seul problème que j'ai en utilisant une liste est que quand j'utilise 'results.setListData()' il faut un 'File []' pas une liste. – Vince