J'ai une question qui pourrait être langue-agnostique mais pour cette implémentation particulière, j'utilise Java. Il est possible et à la liste relativement triviale les dossiers dans un répertoire - en utilisant une fonction comme ceci:Générer "arbre de l'explorateur" en Java efficacement (ne pas utiliser la récursion)
private DefaultMutableTreeNode GenerateFSTree(File f)
{
int i = 0;
File[] Children = f.listFiles();
DefaultMutableTreeNode x = new DefaultMutableTreeNode(f.getName());
if (Children != null)
{
for (i = 0; i < Children.length; i++)
{
File f_cur = Children[i];
if (
f_cur.isDirectory() &&
(this.DisplayHidden || !f_cur.isHidden())
)
{
x.add(GenerateFSTree(f_cur));
}
}
}
return x;
}
Comme vous pouvez le voir fait un usage intensif de la récursivité pour évaluer le système de fichiers et que vous vous retrouvez avec un arbre de DefaultMutableTreeNode
articles. Maintenant, ma question est - y at-il un moyen plus rapide de faire cela? Il doit y avoir, parce que c'est lent. Essayez d'exécuter ceci sur /
et cela prend une éternité. Pourtant, si j'utilise dire Nautilus ou la boîte de dialogue de sélection de fichiers Java intégrée, l'arbre rend instantanément.
Donc, ma question est - comment puis-je accélérer cela?
Merci
Je suppose que cette "stabilité" de Nautilus ou quoi que ce soit vient, parce que l'arbre est seulement chargé partiellement (par exemple ce que vous voyez dans ce moment). Mais c'est juste une supposition. – cyphorious
Est-ce que cela fonctionne même? Jamais entendu parler de la récursivité de la queue? –
J'imagine que la boîte de dialogue de sélection de fichier Java est paresseuse, littéralement. Pour afficher une boîte de dialogue standard de "sélection de fichier", vous n'avez qu'à afficher les parents (récursivement) de l'emplacement actuel et du contenu de l'emplacement actuel, et non l'intégralité de l'arborescence du système de fichiers. Donc, c'est probablement en utilisant les mêmes API que vous, juste en les exécutant quand il le faut. –