Tout d'abord, avez-vous la possibilité d'utiliser Java 7? Là, vous avez un FileVisitor
et le Files.walkFileTree
, qui devrait probablement fonctionner dans vos contraintes de mémoire.
Sinon, la seule façon que je peux penser est d'utiliser
File.listFiles(FileFilter filter)
avec un filtre qui renvoie toujours
false
(veiller à ce que la gamme complète des fichiers est jamais gardé en mémoire), mais qui attire les fichiers à traiter le long de la manière, et les met peut-être dans une file d'attente producteur/consommateur ou écrit les noms de fichiers sur le disque pour traversée ultérieure.
Vous pouvez également, si vous contrôlez les noms des fichiers, ou si elles sont nommées d'une manière agréable, vous pouvez traiter les fichiers en morceaux à l'aide d'un filtre qui accepte les noms de fichiers sur le formulaire file0000000
- filefile0001000
puis file0001000
-filefile0002000
et ainsi sur.
Si les noms sont
pas nommé dans une belle façon comme ça, vous pouvez essayer de les filtrer en fonction du code de hachage du nom de fichier, qui est censé être assez uniformément répartis sur l'ensemble des nombres entiers.
Mise à jour: Soupir. Probablement ne fonctionnera pas. Juste eu un coup d'œil à la mise en œuvre ListFiles:
public File[] listFiles(FilenameFilter filter) {
String ss[] = list();
if (ss == null) return null;
ArrayList v = new ArrayList();
for (int i = 0 ; i < ss.length ; i++) {
if ((filter == null) || filter.accept(this, ss[i])) {
v.add(new File(ss[i], this));
}
}
return (File[])(v.toArray(new File[v.size()]));
}
il échoueront probablement à la première ligne de toute façon ... Trier décevant. Je crois que votre meilleure option est de mettre les fichiers dans des répertoires différents.
Btw, pourriez-vous donner un exemple d'un nom de fichier? Sont-ils "devinables"? Comme
for (int i = 0; i < 100000; i++)
tryToOpen(String.format("file%05d", i))
Désolé, mais ce système d'exploitation ne supporte pas? Vivre en 1950? Je sais de divers outils soufflant, par exemple sur des fenêtres (l'explorateur devenant AWFULLY lent), mais le système de fichiers le soutient. – TomTom
@ TomTom: FAT32 (ancienne, mais en aucun cas 1950 ère, et encore assez commun) a une limite de fichiers par répertoire de 65k. –
Mais en supposant que quelqu'un utilise cela neglegient - sauf pour les périphériques ne le supportant pas, et puis le problème - devinez quoi - ne serait pas "problème de liste des fichiers". – TomTom