Come si conta il numero di file in una directory utilizzando Java? Per semplicità, assumiamo che la directory non abbia alcuna sottodirectory.Conteggio del numero di file in una directory utilizzando Java
So che il metodo standard di:
new File(<directory path>).listFiles().length
ma questo sarà effettivamente passare attraverso tutti i file nella directory, che potrebbe richiedere molto tempo, se il numero di file è di grandi dimensioni. Inoltre, non mi importa dei file effettivi nella directory a meno che il loro numero sia maggiore di un numero fisso elevato (ad esempio 5000).
Sto indovinando, ma la directory (o il suo i-node in caso di Unix) non memorizza il numero di file in esso contenuti? Se potessi ottenere quel numero immediatamente dal file system, sarebbe molto più veloce. Devo eseguire questo controllo per ogni richiesta HTTP su un server Tomcat prima che il back-end inizi a eseguire l'elaborazione vera e propria. Pertanto, la velocità è di fondamentale importanza.
Potrei eseguire un daemon di tanto in tanto per cancellare la directory. Lo so, quindi per favore non darmi quella soluzione.
Se la directory potenzialmente ha un numero enorme di file (1000 +), è possibile evitare di allocare l'array restituito dai metodi dell'elenco File. Non ho ancora provato questo, ma forse potresti usare listFiles e passargli un'istanza FileFilter che esegue il conteggio dei file nel metodo accept, mentre allo stesso tempo restituisce false per tutti i file. Suppongo che questo eviti l'allocazione dell'array, pur continuando a fornire un conteggio dei file. –
Ignora il mio ultimo commento ... A seconda del JDK impl, l'array può essere assegnato comunque (sotto il cofano).Ciò sembra essere il caso in openjdk comunque. –
Per Java 7 e versioni successive, questo problema ha una buona soluzione con un'API Java standard. Vedi la risposta di @ mateuscb di seguito: http://stackoverflow.com/questions/687444/contenuto-il-numero-di-file-in-un-directory-utilizzando-java/30784016#30784016. –