Une première solution est de créer toute l'arborescence des TreeNode utilisables. Bien sûr, c'est la plus facile, mais la plus gourmande en mémoire.
Pour un système de fichiers il faut mieux créer l'arborescence de façon dynamique. Je n'ai jamais fait ça, mais tu pourrais utiliser une implémentation personalisée de TreeNode qui ne se remplit de ses fils qu'à la volée, lors de l'expansion de son arborescence. Avant elle est vide, mais sa méthode isLeaf retourne true si elle a des fils. Je ne sais pas si ça marche, mais j'espère que ça te mettra sur une piste. 