2010-11-24 21 views
3

La bibliothèque Apache Commons VFS ne semble pas pouvoir prendre en charge les dossiers Windows spéciaux (réseau, récent, ordinateur, bibliothèques, etc.).Obtention de dossiers spéciaux dans Apache Commons VFS

File[] cbFolders = (File[])sun.awt.shell.ShellFolder.get("fileChooserComboBoxFolders"); 

puis en les convertissant à FileObjects comme ceci:

for(File f: cbFolders){ 
    fileObjArray.add(mgr.resolveFile(f.getPath())); 
} 

Il ne fonctionne tout simplement pas et tout ce que vous obtenez est le nom de chemin pour son nom.

Le chemin de ces fichiers sont comme ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}

Toute aide à obtenir ce travail serait apprécié. Il semble que c'est probablement un bug dans la bibliothèque. Espérons que quelqu'un sait d'un hack ou d'un tel pour le faire fonctionner.

Edit: je crois que j'étais proche quand je créé de nouveaux raccourcis

try{ 
    final File[] cbFolders = (File[])sun.awt.shell.ShellFolder.get("fileChooserComboBoxFolders"); 

    String name = ""; 

    File[] systemFiles = new File[cbFolders.length]; 
    i =0; 
    for(File f: cbFolders){ 
     name = f.getName(); 
     if(name.startsWith("::{")){ 
      name = name.substring(2); 
      System.out.println("converting: " + name); 
      String fileName = fileSystemView.getSystemDisplayName(f); 

      File file = new File("C:\\Users\\Daniel\\Desktop\\" + fileName + "." + name); 

      boolean success = false; 
      success = file.mkdir(); //returns false even if it works, 

      systemFiles[i] = file; 
     }else 
      systemFiles[i] = f; 
     i++; 
    } 

    list = new ArrayList<File>(Arrays.asList(systemFiles)); 
}catch(final Exception e){ 
    ... 
} 

Il montre l'icône correcte et le nom et l'Explorateur Windows, il ouvre correctement, mais toujours avec VFS ouvre un dossier vide.

+0

Wow! Je n'ai jamais utilisé la classe ShellFolder. Comment avez-vous trouvé? Comment avez-vous su que vous devez envoyer le paramètre "fileChooserComboBoxFolders"? Je suis désolé que je demande une quête au lieu de vous donner une réponse. Je n'ai pas de réponse mais la question m'intéresse. – AlexR

+0

Je ne comprends tout simplement pas quelle est la relation entre le titre et la question elle-même. Le package de Commons VFS est org.apache.commons.vfs lorsque vous utilisez sun.awt.shell. – AlexR

+0

"Comment l'avez-vous trouvé?" Recherche hardcore sur google :) "Comment saviez-vous que vous devez envoyer le paramètre" fileChooserComboBoxFolders "?" Code source Java. "Je ne comprends tout simplement pas quelle est la relation entre le titre et la question elle-même." Je veux que VFS supporte les fichiers spéciaux, par défaut il ne peut pas gérer les noms de chemins de ces fichiers spéciaux. – Zammbi

Répondre

1

Il n'existe aucun support réel pour ces fichiers. Le problème principal est que ni l'objet Java File ne les traite correctement (new File("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}").toURI().toString() n'échappe pas correctement aux deux-points) ni Java ou VFS connaissant à propos de :: comme une racine de système de fichiers absolue. Vous ne pouvez donc pas les transformer en URI (requis par resolveFile()) qui conserve les propriétés spéciales reconnues par Windows.

+0

C'est une vieille question maintenant. C'était avant Java 7 qui a tout amélioré dans ce domaine. Je pourrais obtenir Java 6 pour gérer ces fichiers très bien, mais jamais VFS. J'ai utilisé mon code dans certaines régions et VFS dans d'autres. C'était assez hacky :) – Zammbi