Ordner schnell durchlesen

itbuilder07

Mitglied
Morgen liebes Forum,

ich habe ein Problem. Ich möchte gern ein Ordner durchlesen, der innerhalb sehr viele Dateien enthält. Wir reden hier von 300 weiteren Ordnern und ungefähr 2800 Dateien. Zurzeit mache ich das mit einer zweifachen Schleife und mit der listfiles()- Methode.
Zweifachen Schleife um im 1.Schritt die Ordner und im 2. Schritt innerhalb jedes Ordners die Dateien einzulesen. Ziel ist es bestimmte Dateien die eine gewisse Endung haben zu finden und sofort zu verarbeiten.
Ich habe schon geschaut die Verarbeitung der Dateien geht in bruchteilen von sekunden.
Die Analyse und Findung der Dateien mit einer bestimmten Endung kann durchaus dauern.

Ich habe mal die Zeit gestoppt, die Verarbeitungsdauer dauert ca. 20 sek +/-.
Natürlich ist das nicht gerade langsam in Betracht der Menge, dennoch gibt es eventuell eine effizientere und schnellere Lösung?

Vielen Dank schon mal :D
 
Zuletzt bearbeitet:

ssoul26

Bekanntes Mitglied
Wie sieht dein Code momentan aus? Wäre nicht schlecht den zu sehen! Dann können wir evtl. Optimierungsvorschläge geben! ;)
 

itbuilder07

Mitglied
Ja klar entschuldige völlig vergessen :)

Java:
			String eingabePfad = args[0];
			String ausgabePfad = args[1];
			File pfad = new File(eingabePfad);
			if (pfad.exists()) {
				File[] ordnerArray = pfad.listFiles();
				for (int i = 0; i < ordnerArray.length; i++) {

					String[] ordnerUnterArray = ordnerArray[i].list();
					for (int j = 0; j < ordnerUnterArray.length; j++) {
						if (ordnerUnterArray[j].endsWith("xx.xx")) {
							new copyLesen(ordnerUnterArray[j],ordnerArray[i],
									ausgabePfad);
						} else if (ordnerUnterArray[j].endsWith("xx.xx")) {
							new DateiLesen(ordnerUnterArray[j],ordnerArray[i],
									ausgabePfad);
						}
					}
				}

Die Begriffe in der If Bedingung hab ich abgeändert. Da steht normal was sinnvolles ^^
 
Zuletzt bearbeitet:

ssoul26

Bekanntes Mitglied
Guck dir mal das an, und überprüfe ob es schneller ist und vllt. geeigneter. Hier erfolgt die Suche "Rekursiv".
Java:
public class Files {
   /**
    * @param args
    */
   public static void main(String[] args) {
      File f = new File("C://");
      searchFile(f, ".doc");
   }

   private static void searchFile(File root, String ending) {
      File[] files = root.listFiles();
      for (File f : files) {
         if (f.isDirectory()) {
            searchFile(f, ending);
         } else {
            String path = f.getAbsolutePath();
            if (path.endsWith(ending)) {
               System.out.println(path);
            }
         }
      }
   }
}
 

arilou

Bekanntes Mitglied
Da ist wohl kaum eine Beschleunigung machbar.
Ggf könntest du
new copyLesen(...);
und
new DateiLesen(...);
ersetzen durch (static) Methodenaufrufe - das Erzeugen neuer Objekte ist Rechenzeit-teuer.
Evtl. ist auch das Lesen/Schreiben selbst noch beschleunigbar, aber an .listFiles() und den beiden Schleifen kommst' wohl kaum vorbei.
 

ssoul26

Bekanntes Mitglied
Da ist wohl kaum eine Beschleunigung machbar.
Ggf könntest du
new copyLesen(...);
und
new DateiLesen(...);
ersetzen durch (static) Methodenaufrufe - das Erzeugen neuer Objekte ist Rechenzeit-teuer.
Evtl. ist auch das Lesen/Schreiben selbst noch beschleunigbar, aber an .listFiles() und den beiden Schleifen kommst' wohl kaum vorbei.
Welche beiden Schleifen meinst du denn, die unentbehrlich sind? Rekursiv bräuchtest du nur eine Schleife. Siehe oben.
 

Thallius

Top Contributor
Du sagst selber das Ermitteln dauernt nicht lange sondern das Verarbeiten, zeigst uns aber nur den Code der ermittelt. Optimieren müssen wirst du ja wohl oder übel in den beiden Konstruktoren copyLesen und DateiLesen.

Mal ganz davon abgesehen, dass es nach Konventio auch CopyLesen heissen müßte finde ich doie Namen ziemlich gruselig.

Gruß

Claus
 

jgh

Top Contributor
lass doch deine Klassen "copyLesen" und "DateiLesen" das Runnable-Interface implementieren und starte damit jeweils einen neuen Thread.
 

Flown

Administrator
Mitarbeiter
Also ich würde NIO.2 verwenden (Java 8):

Java:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;

public class FileSearch {
    
    private static final String ENDING = ".rgb";
    
    public static void main(String[] args) {
        new FileSearch();
    }
    
    public FileSearch() {
        Path start = Paths.get("parent");
        try {
            
            List<Path> files = Files.find(start, Integer.MAX_VALUE, (path, attribute) -> path.toString().endsWith(ENDING)).collect(Collectors.toList());
            System.out.println(files.size());
            files.forEach(e -> doStuff(e));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void doStuff(Path e) {
//        System.out.println(e.toString());
    }

}
 

arilou

Bekanntes Mitglied
Welche beiden Schleifen meinst du denn, die unentbehrlich sind? Rekursiv bräuchtest du nur eine Schleife. Siehe oben.

Er scheint zu wissen, dass die erste Dateisystem-Ebene nur Unterverzeichnisse beinhaltet, und darin dann nur einfache Dateien sind - damit kann er sich .isDirectory()-Tests sparen.

Rekursiv werden aus den zwei Schleifen dann (implizit) eine Rekursionstiefe von 2 (sowie implizit zwei Fälle - Directory vs. einfache Datei).
 

arilou

Bekanntes Mitglied
lass doch deine Klassen "copyLesen" und "DateiLesen" das Runnable-Interface implementieren und starte damit jeweils einen neuen Thread.

Bringt vmtl. nichts, kann sogar kontraproduktiv sein.
Wenn 2 (oder mehr) Threads Dateien einlesen, zerschießen sie sich gerne gegenseitig die Caches.
Alternativ dreht die HDD hohl, weil sie plötzlich "fragmentiert" lesen soll - für die Festplatte geht's "wild durcheinander".
Solange man in der Verarbeitung einen Flaschenhals hat, sollte man bzgl. diesem schön -hm- strukturiert/linearisiert/serialisiert bleiben, das ist meist am schnellsten.
 

osion

Bekanntes Mitglied
Morgen liebes Forum,

ich habe ein Problem. Ich möchte gern ein Ordner durchlesen, der innerhalb sehr viele Dateien enthält. Wir reden hier von 300 weiteren Ordnern und ungefähr 2800 Dateien. Zurzeit mache ich das mit einer zweifachen Schleife und mit der listfiles()- Methode.
Zweifachen Schleife um im 1.Schritt die Ordner und im 2. Schritt innerhalb jedes Ordners die Dateien einzulesen. Ziel ist es bestimmte Dateien die eine gewisse Endung haben zu finden und sofort zu verarbeiten.
Ich habe schon geschaut die Verarbeitung der Dateien geht in bruchteilen von sekunden.
Die Analyse und Findung der Dateien mit einer bestimmten Endung kann durchaus dauern.

Ich habe mal die Zeit gestoppt, die Verarbeitungsdauer dauert ca. 20 sek +/-.
Natürlich ist das nicht gerade langsam in Betracht der Menge, dennoch gibt es eventuell eine effizientere und schnellere Lösung?

Vielen Dank schon mal :D

Frage:

1. Was für ein Prozessor hast du drin ? (wie alt ist der Computer?)
2. Wo befinden sich die Dateien?
3. Total hast du 300 Ordner +2800 Dateien?
4. Warum machst du keine Threads?
---
Was ist der Sinn des Programms?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Wo den Ordner javafx-sdk-21.0.2 unter Linux ablegen? Java Basics - Anfänger-Themen 5
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
berserkerdq2 Wie gebe ich den Pfad zu einer Datei an, die in einem Ordner in Eclipse ist? Java Basics - Anfänger-Themen 1
E Javamail Gesendet ordner Java Basics - Anfänger-Themen 1
E Outlook ordner auslesen Java Basics - Anfänger-Themen 4
L Ordner in neuen erstellten Ordner erstellen Java Basics - Anfänger-Themen 12
T src Ordner ausführen Java Basics - Anfänger-Themen 9
M Pfadprobleme - Zugriff auf einen Ordner im Workspace Java Basics - Anfänger-Themen 17
B Name von Verzeichnis bekommen - Files von einem Ordner auslesen Java Basics - Anfänger-Themen 4
L Files verschieben in einen Ordner Java Basics - Anfänger-Themen 87
Henri Mehrere Ordner umbenennen Java Basics - Anfänger-Themen 11
J Eclipse Einrichten : Umzug in anderen Ordner Java Basics - Anfänger-Themen 2
N Project layout eclipse ( seperate ordner für klassen ? ) Java Basics - Anfänger-Themen 1
F Ordner auf alle Unterdatein abfragen Java Basics - Anfänger-Themen 3
F Zeile in Ordner Java Basics - Anfänger-Themen 4
J variablePathPart ändern nach dem Ordner abgearbeitet worden ist Java Basics - Anfänger-Themen 1
das_leon Auf Ordner zugreifen (Vollzugriff) Java Basics - Anfänger-Themen 2
MR._FIRE_Flower Ordner im Explorer öffnen lassen Java Basics - Anfänger-Themen 2
C Methoden Dateien im Ordner anzeigen Java Basics - Anfänger-Themen 12
L Ordner Zippen Java Basics - Anfänger-Themen 2
L Ordner zusammenlegen Java Basics - Anfänger-Themen 3
J Java Ordner Erstellung nicht möglich. Java Basics - Anfänger-Themen 3
G Input/Output Aus txt-Datei lesen, aus Ordner Java Basics - Anfänger-Themen 1
M Ordner mit Inhalt löschen Java Basics - Anfänger-Themen 7
M Erste Schritte Ordner im selber Verzeichnis wählen Java Basics - Anfänger-Themen 1
D Input/Output Ordner aus .Jar in das Verzeichnis der .Jar kopieren Java Basics - Anfänger-Themen 1
P Einen Ordner mit Dateien hochladen [FTP] Java Basics - Anfänger-Themen 2
agent47 Input/Output Ordner/Datei Rekutrsiv erstellen und Java Basics - Anfänger-Themen 8
S Prüfen ob bestimmter Ordner geöffnet ist (Windows XP) Java Basics - Anfänger-Themen 5
D Ordner der Ausgeführten Datei erhalten Java Basics - Anfänger-Themen 4
P newbie- Frage zu Ordner-Projektstruktur Java Basics - Anfänger-Themen 3
L Herunterladbares Java Programm in bestimmten Ordner speicher Java Basics - Anfänger-Themen 3
M Input/Output Ordner erstelen? Java Basics - Anfänger-Themen 12
A Ordner zippen Java Basics - Anfänger-Themen 10
T .jar Datei als Ordner benutzen/ Dateien aus .jar Datei auslesen Java Basics - Anfänger-Themen 3
J Ordner unter Windows Verstecken Java Basics - Anfänger-Themen 2
D Ordner auf Desktop erstellen(Pc unabhängig) Java Basics - Anfänger-Themen 3
M Neuen Ordner im Überverzeichnis erstellen, und dadrin arbeiten Java Basics - Anfänger-Themen 4
I ZIP Archive erstellen - ich möchte aber nur den jeweiligen Ordner zippen, bekomme ganzen Pfad Java Basics - Anfänger-Themen 1
I Datei schreiben, im Klassen-Ordner Java Basics - Anfänger-Themen 15
P Dateien im Ordner auflisten. Java Basics - Anfänger-Themen 3
V bin und src Ordner Java Basics - Anfänger-Themen 3
M JFS- Ordner von faces-config.xml Java Basics - Anfänger-Themen 2
M JFileChooser Ordner auswählen Java Basics - Anfänger-Themen 5
C src-Ordner in jar-Datei (Eclipse) Java Basics - Anfänger-Themen 4
S Datei ausführen, verschiedene Ordner Java Basics - Anfänger-Themen 2
B Ordner leeren/löschen Java Basics - Anfänger-Themen 5
M Java-Datei in Ordner Kopieren Java Basics - Anfänger-Themen 12
X Wieso mehrere JRE ordner? Java Basics - Anfänger-Themen 8
N Kein Zugriff auf Ordner -> NullPointerException Java Basics - Anfänger-Themen 2
I Dateien in Ordner und Unterordner durchsuchen Java Basics - Anfänger-Themen 18
J Markierte Einträge (Dateien) in JList sollen in einen anderen Ordner verschoben werden. Java Basics - Anfänger-Themen 12
D Compiler-Fehler Klasse wird im selben Ordner nicht gefunden Java Basics - Anfänger-Themen 5
J Markierte Items in einer JLIST in einen Ordner verschieben Java Basics - Anfänger-Themen 2
S Bearbeiting von xml-Datei in src-Ordner möglich?i Java Basics - Anfänger-Themen 5
B res-Ordner für Text- und Bilddateien Java Basics - Anfänger-Themen 23
B Ordner in jar dateien einfügen Java Basics - Anfänger-Themen 4
M Java Eclipse IDE erstellt keinen Bin Ordner. Java Basics - Anfänger-Themen 10
F Kopieren von Ordner sammt inhalt Java Basics - Anfänger-Themen 5
V Ressourcen aus Ordner nutzen Java Basics - Anfänger-Themen 5
W Ordner "auslesen" Java Basics - Anfänger-Themen 18
R Aus jar Ordner lesen Java Basics - Anfänger-Themen 27
F Auf Ordner im selben Verzeichniss zugreifen Java Basics - Anfänger-Themen 3
K Input/Output Verschiedene Ordner für Java u.v.m. Projekte Java Basics - Anfänger-Themen 3
P Problem :Java-Dateien in einem Ordner ablegen Java Basics - Anfänger-Themen 10
S Ordner / Package Struktur bei größerem Projekt? Java Basics - Anfänger-Themen 8
O Erste Schritte Runnable Jar <- Ordner Fehlen Java Basics - Anfänger-Themen 6
D höchster ordner in zip datei Java Basics - Anfänger-Themen 14
J Ordner und Unterordner nach Dateien durchsuchen Java Basics - Anfänger-Themen 7
M Dateipfad: einen Ordner "hoch" Java Basics - Anfänger-Themen 11
M Input/Output Namen der Files aus einem Ordner MIT bestimmten Encoding auslesen? Java Basics - Anfänger-Themen 3
L Größe von Ordner wiedergeben Java Basics - Anfänger-Themen 4
M Applet soll Bilder aus Ordner lesen Java Basics - Anfänger-Themen 9
V .cab Dateien im Win Profil Ordner? Java Basics - Anfänger-Themen 5
eLogic Ordner kopieren/schreiben Java Basics - Anfänger-Themen 2
D Ordner in Eclipse Importieren Java Basics - Anfänger-Themen 6
F Ordner in JAR scannen Java Basics - Anfänger-Themen 3
xehpuk Ordner "Eigene Bilder" ansteuern Java Basics - Anfänger-Themen 3
P Kompelieren von 2 Java Dateien im selben Ordner Java Basics - Anfänger-Themen 13
V Datei in Ordner auslesen -> neuer Ordnername Java Basics - Anfänger-Themen 7
J Dateien aus Ordner auslesen bzw. einlesen Java Basics - Anfänger-Themen 4
G jar datei funktioniert nicht ohne jdom.jar im Ordner Java Basics - Anfänger-Themen 7
H Textdateien in Ordner einlesen - unendlich ? Java Basics - Anfänger-Themen 8
B Datei in mehrere Ordner splitten und wieder zusammenfuegen... Java Basics - Anfänger-Themen 3
B Ordner öffnen (eigener Dateibrowser) Java Basics - Anfänger-Themen 8
F Liste aller Ordner auf einem Laufwerk erstellen? Java Basics - Anfänger-Themen 3
StrikeTom Wie ermittel ich alle dateinamen in einem Ordner Java Basics - Anfänger-Themen 2
H Wie Projekt-Ordner-Pfad ermitteln? Java Basics - Anfänger-Themen 11
S Betriebssystem - Ordner erstellen auf Windows & Linux Java Basics - Anfänger-Themen 3
BleedingSt4r Ordner + Unterordner "auslesen" ? Java Basics - Anfänger-Themen 32
S Ordner erstellen Problem Java Basics - Anfänger-Themen 4
S Ordner umbenennen mit renameTo - mysteriöses Problem Java Basics - Anfänger-Themen 9
T alle Ordner in einem Ordner in JList anzeigen Java Basics - Anfänger-Themen 3
M Ordner Download Java Basics - Anfänger-Themen 11
Developer_X Zugriff auf PC verweigert bei Ordner erstellung, wie zulassen?! Java Basics - Anfänger-Themen 3
Developer_X Java File listet den Ordner, in dem sich die Datei befindet Java Basics - Anfänger-Themen 7
P FTP Ordner löschen Java Basics - Anfänger-Themen 5
Developer_X Java - per Java einen Ordner löschen Java Basics - Anfänger-Themen 9
S Dateien von einem Ordner in den anderen kopieren Java Basics - Anfänger-Themen 2
M Ordner der jar Datei herausfinden und Partent durchsuchen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben