2017-01-02 4 views
0

Je suis en train d'utiliser JFileChooser pour sélectionner uniquement les fichiers des répertoires éliminant le dossier:JFileChooser.FILES_ONLY obtenir les fichiers et les répertoires

fc.setFileSelectionMode(JFileChooser.FILES_ONLY);    // Only look at files 
fc.setCurrentDirectory(new File(dbPath)); 
int returnVal = fc.showOpenDialog(null);      // Switch DB dialog 
if (returnVal == JFileChooser.APPROVE_OPTION)     // Get good DB? 
{ 

    filePDF = fc.getSelectedFile().getAbsolutePath();  // Get path 
    txtTSDir.setText(filePDF); 
} 
else 

Cependant, je reçois des fichiers et des répertoires. Cela semble assez simple. Qu'ai-je manqué?

enter image description here

Répondre

0

Désolé devait réécrire quelques fois mon esprit me trolls tout en expliquant. Bon, alors vous pensez que si vous définissez votre FileSelectionMode sur FILES_ONLY, votre JFileChooser n'affichera que les fichiers et ne montrera plus les répertoires. Mais ce qui se passe réellement, c'est qu'il ne vous laissera plus sélectionner un répertoire comme une entrée. est de s'assurer que vous obtenez un fichier quand vous vous y attendez.

MAIS.

Il en va de même pour direcotries_only cela vous montrera toujours les fichiers mais vous ne pouvez pas les sélectionner en entrée.

+0

Merci. Je savais qu'il me manquait quelque chose. Cela explique mon idée fausse. –

0

L'indicateur JFileChooser.FILES_ONLY indique que vous ne pouvez sélectionner que des fichiers. Les répertoires sont montrés parce que l'utilisateur peut vouloir trouver le dossier à l'intérieur d'eux.

Si vous voulez exclure les répertoires de vue utilisation FileFilter

fc.setFileFilter(new FileFilter() { 

     @Override 
     public String getDescription() { 
      return "Only files"; 
     } 

     @Override 
     public boolean accept(File f) { 
      return !f.isDirectory(); 
     } 
    }); 
2

On dirait que vous voulez cacher des répertoires. Donc, il suffit de créer sur mesure FileSystemView:

JFileChooser jFileChooser = new JFileChooser(); 

jFileChooser.setFileSystemView(new FileSystemView() { 
    @Override 
    public File[] getFiles(File dir, boolean useFileHiding) { 
     return Arrays.stream(super.getFiles(dir, useFileHiding)).filter(File::isFile).toArray(File[]::new); 
    } 

    @Override 
    public File createNewFolder(File containingDir) throws IOException { 
     throw new NotImplementedException(); 
    } 
}); 

Comme vous pouvez le voir, je laisse uniquement les fichiers dans la méthode getFiles et maintenant je ne vois que des fichiers dans mon répertoire personnel:

hide directories in home directory

+0

Merci. Je peux l'utiliser. –