Verzeichnis durchsuchen geschwindigkeit optimieren

Status
Nicht offen für weitere Antworten.
B

bananenkasper

Gast
Hallo zusammen,

ich versuche ein verzeichnis rekursiv zu durchsuchen.
Klappt auch soweit.
Allerdigns ist die Performance erbärmlich.

Bisher habe ich es so gelöst:

Code:
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.ExecutionException;


public class Test {
	
	private final static FileFilter DIR_FILTER = new FileFilter() {
		public boolean accept(File pathname) {
			if (pathname.isDirectory())
				return true;
			return false;
		}
	};

	private final List<File> dirList = new LinkedList<File>();
	
	public static void main(String[] args) {
		final String searchString = args[1];
		final File searchDir = new File(args[0]);
		
		dirList.add(searchDir);
		while(dirList.size() != 0){
			File file = dirList.remove(0);
			processDir(file);
		}
	}

	private void processDir(File searchDir) {
		File[] childDirs = searchDir.listFiles(DIR_FILTER);
		dirList.addAll(Arrays.asList(childDirs));	
	}
}

Das ist bei grösseren Verzeichnissen schnell unbrauchbar langsam.
Gibt es Möglichkeiten, die Ausführung zu beschleunigen?
Währe für jeden Tipp dankbar!
 
Zuletzt bearbeitet von einem Moderator:

slawaweis

Bekanntes Mitglied
das langsam kann nur daher kommen, dass alle Ordner in einer Liste abgespeichert werden, wobei es schon Tausende sein müssen, damit es spürbar langsam wird. Übrigens, ein interessanter Algorithmus, habe so einen noch nie gesehen. :D Normalerweise löst man solche Probleme mit Rekursion:

[highlight="java"]
public static void main(String[] args) {
final String searchString = args[1];
final File searchDir = new File(args[0]);

processDir(searchDir);
}
}

private void processDir(File searchDir) {
File[] childDirs = searchDir.listFiles();

for(File cd : childDirs)
if(cd.isDirectory())
processDir(cd);
}
[/highlight]

Slawa
 

Marco13

Top Contributor
Wozu Threads bei so einem Miniprogramm? Das bringt da höchstwhrscheinlich auch nichts. Ggf. könnte tatsächlich dieses List-Gewurschtel unnötig Zeit kosten, aber im Vergleich zu der Zeit, die der Computer braucht, den Schreib/Lesekopf der Festplatte auf die richtige Spur zu bringen, um dann gemütlich drauf zu warten dass vielleicht "zufällig" irgendwann die Daten vorbeikommen, auf die er da gerade wartet, sollte das eigentlich vernachlässigbar sein. (Was ich sagen will: Es KANN sein, dass man das ganze nur durch eine schneller Festplatte merklich beschleunigen kann ;) )
 

Wildcard

Top Contributor
Threads können die Sache sogar deutlich langsamer machen. Ein Thread pro physikalisches Drive dürfte das schnellste sein. Zu viele Threads auf einem, und die Festplattenkopf muss mehr justieren als lesen.
 

foobar

Top Contributor
Ihr liegt alle voll daneben. Das Problem ist die unnötige If-Abfrage:
Code:
public boolean accept(File pathname) {
  if (pathname.isDirectory())
	return true;
   return false;
}
Da kannste auch direkt das machen:

Code:
public boolean accept(File pathname) {
  return pathname.isDirectory();
}

SCNR
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K [Refactoring] ClassLoader Verzeichnis durchsuchen lassen Allgemeine Java-Themen 7
S Verzeichnis schreibzugriffe erlaubt unabhängig von ACL und Posix Allgemeine Java-Themen 11
T Geeignetes Verzeichnis Allgemeine Java-Themen 5
P Wofür ist das Verzeichnis $HOME/.oracle_jre_usage? Allgemeine Java-Themen 3
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
K NetBeans Ordner bei 'Clean&Build' automatisch in dist Verzeichnis kopieren Allgemeine Java-Themen 0
C Verzeichnis ins JMenu einlesen Allgemeine Java-Themen 2
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
C Umgebungsvariable Java-Datei in anderem Verzeichnis ausführen Allgemeine Java-Themen 2
R Welches User-Verzeichnis wählen für Configurationsdateien - Windows Allgemeine Java-Themen 2
R Änderungen in einem Verzeichnis beobachten - Windows Allgemeine Java-Themen 3
S Aus executable jar Verzeichnis erstellen Allgemeine Java-Themen 8
reibi Leeres Verzeichnis in ein Zipfile einfügen Allgemeine Java-Themen 12
reibi Schreibrechte auf ein Verzeichnis Allgemeine Java-Themen 3
G Log4J Verzeichnis der Log-Datei konfigurieren Allgemeine Java-Themen 8
A Drucken ändert aktuelles Verzeichnis Allgemeine Java-Themen 2
reibi Aktuelles Verzeichnis in den Klassenpfad nehmen Allgemeine Java-Themen 9
T Eclipse Dateien einzeln aus einem Verzeichnis laden! Allgemeine Java-Themen 6
B ObjectOutputStream verzeichnis wählen Allgemeine Java-Themen 8
Benji0815 Verzeichnis wie im Windows Explorer in einem JTree anzeigen Allgemeine Java-Themen 6
L Applet Verzeichnis lesen Allgemeine Java-Themen 3
B in welchem verzeichnis liegen alle installierten klassen? Allgemeine Java-Themen 6
G Klassen aus Verzeichnis laden Allgemeine Java-Themen 13
S Aktuelles Verzeichnis - CMD/Kommandozeilenproblem Allgemeine Java-Themen 9
G Zwischen Datei und Verzeichnis unterscheiden. Allgemeine Java-Themen 11
C Velocity liest template-Dateien nicht aus einem Verzeichnis Allgemeine Java-Themen 3
heart_disease Verzeichnis-Probleme mit ZIP Allgemeine Java-Themen 4
M Verzeichnis durchlaufen und Dateien umbennen Allgemeine Java-Themen 2
P Verzeichnis in JAR-Datei durchgehen Allgemeine Java-Themen 2
G Dateien und Verzeichnisse in einem Verzeichnis zählen Allgemeine Java-Themen 9
W Verzeichnis für Benutzerfiles Allgemeine Java-Themen 7
S Ist File ein root-Verzeichnis? Allgemeine Java-Themen 2
J Herangehensweise: FTP-Transfer von Verzeichnis Allgemeine Java-Themen 8
G Java Klasse in einem anderen Verzeichnis aufrufen Allgemeine Java-Themen 3
H mit javac Verzeichnis kompilieren Allgemeine Java-Themen 2
E Existierendes Verzeichnis nicht gefunden Allgemeine Java-Themen 4
M Verzeichnis auslesen - Fehler in isDirectory()? Allgemeine Java-Themen 4
F Verzeichnis, in dem sich die ausführende jar Datei befindet Allgemeine Java-Themen 9
K Verzeichnis rekursiv aus JAR-Datei extrahieren Allgemeine Java-Themen 6
O Ein Verzeichnis aus der Root ablesen/Dateitypen registrieren Allgemeine Java-Themen 5
P Verzeichnis auwählen Allgemeine Java-Themen 2
S Starten einer Anwendung von einem anderen Verzeichnis Allgemeine Java-Themen 3
P Mit getResource() ein ganzes Verzeichnis laden Allgemeine Java-Themen 5
T Verzeichnis der Klasse Allgemeine Java-Themen 7
J Verzeichnis aus meinem JAR auslesen und abspeichern. Allgemeine Java-Themen 2
G Verzeichnis löschen? Allgemeine Java-Themen 3
W Aktuelles Verzeichnis rausfinden Allgemeine Java-Themen 13
S Probleme mit dem Compilieren von Dateien in Verzeichnis Allgemeine Java-Themen 4
G Dateien zählen im Verzeichnis Allgemeine Java-Themen 11
G aktuelles Verzeichnis Allgemeine Java-Themen 2
A Verzeichnis auflisten - auch innerhalb eines Jars Allgemeine Java-Themen 6
G Verzeichnis überwachen Allgemeine Java-Themen 13
S Temporäres Verzeichnis anlegen? Allgemeine Java-Themen 4
G Java Runtime Verzeichnis ermitteln Allgemeine Java-Themen 3
S dringend-verzeichnis von festplatte einlesen Allgemeine Java-Themen 9
P Dateinamen testen? Schreibrechte auf Verzeichnis testen? Allgemeine Java-Themen 8
M Verzeichnis verschieben? Allgemeine Java-Themen 2
G Bestimmte Dateien aus Verzeichnis löschen Allgemeine Java-Themen 5
S Programm starten mit Runtime aktuelles Verzeichnis wechseln Allgemeine Java-Themen 7
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
Ernesto95 HTTP Mit JavaScript erzeugte dynamische Webseite auslesen und nach einem Schlüsselwort durchsuchen Allgemeine Java-Themen 6
districon Programm zum Durchsuchen von (Ebay-)Artikeln Allgemeine Java-Themen 1
Kirby.exe Filename nach bestimmtem Pattern durchsuchen Allgemeine Java-Themen 5
S Wörterliste nach Wörtern mit u durchsuchen und diese auf der Konsole ausgeben lassen Allgemeine Java-Themen 33
T Methoden Methode zum durchsuchen einer ArrayList Allgemeine Java-Themen 8
T Textarea nach nur 1 wort durchsuchen Allgemeine Java-Themen 3
F String nach Schlüsselwörtern durchsuchen und ganze Zeile ausgeben Allgemeine Java-Themen 4
M Fasta nach Mustern durchsuchen dauert zu lange Allgemeine Java-Themen 2
R HTML Tabelle durchsuchen Allgemeine Java-Themen 3
G String durchsuchen Allgemeine Java-Themen 5
S String mit Matcher.find durchsuchen und ausgeben Allgemeine Java-Themen 7
T Package durchsuchen Allgemeine Java-Themen 11
A Excel nach bestimmten Inhalt durchsuchen Allgemeine Java-Themen 8
P Ordner und Unterordner rückwärts durchsuchen Allgemeine Java-Themen 3
P Sinnfragen, um eine riesige Verzeichnisstruktur zu durchsuchen und zu verarbeiten Allgemeine Java-Themen 20
B Swing In JAR Ordner durchsuchen Allgemeine Java-Themen 2
P Ordnerstruktur nach .js-Files durchsuchen Allgemeine Java-Themen 2
S HTML-Quelltext nach bestimmter Stelle durchsuchen Allgemeine Java-Themen 2
windl Durchsuchen eines Verzeichnisbaums Allgemeine Java-Themen 3
C C-ähnlichen Code nach speziellen Informationen durchsuchen Allgemeine Java-Themen 2
G Code nach Schleifen und Verzweigungen durchsuchen Allgemeine Java-Themen 6
A Text via RegEx durchsuchen und teile ersetzten Allgemeine Java-Themen 5
E ordner rekursiv durchsuchen Allgemeine Java-Themen 6
M Große Datei mit Regex durchsuchen Allgemeine Java-Themen 4
C Spielfeld nach Treffern durchsuchen Allgemeine Java-Themen 4
F Char-Array nach einem Wort durchsuchen! Allgemeine Java-Themen 11
P String nach ENTER durchsuchen Allgemeine Java-Themen 6
W return Collection mit schleife durchsuchen Allgemeine Java-Themen 10
L Textdatei nach Wörter durchsuchen Allgemeine Java-Themen 3
T Array durchsuchen - aber richtig Allgemeine Java-Themen 7
O PDF-Dateien bearbeiten/durchsuchen Allgemeine Java-Themen 3
C Reguläre Ausdrücke, String rückwärts durchsuchen Allgemeine Java-Themen 6
hdi text durchsuchen -> satzzeichen entfernen Allgemeine Java-Themen 5
T Webseiten durchsuchen und Bilder downloaden Allgemeine Java-Themen 4
V Object durchsuchen Allgemeine Java-Themen 4
G Am schnellsten Datei durchsuchen? Allgemeine Java-Themen 3
G Datei durchsuchen, lange Laufzeit! Allgemeine Java-Themen 2
C Dateien auf Festplatte speichern durch "Durchsuchen-But Allgemeine Java-Themen 3
A String nach Characterfolge durchsuchen. Allgemeine Java-Themen 3
M Ordner nach neuester Datei durchsuchen Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben