Alle Files im Ordner nach Dateinamen durchsuchen

Status
Nicht offen für weitere Antworten.

fantrixx

Bekanntes Mitglied
Hi all,

ich bin nun vor ein Problem und würde eure Tips dazu wissen.
Ich schreibe gerade ein Programm und will in diesem Programm sowas wie
eine Suchfunktion einbinden. Der Benutzer gibt in einem TextFeld das
ein was er suchen möchte und bestätigt mit einem Button. So dann soll
der Rechner sich das eingegebene nehmen und dann eine festen Ordner
nach dem Namen suchen. Der Name nachdem gescuht werden soll steht als
Dateiname schon drine.
Es sind alles Textdateien.
Bsp:

User Suchbegriff = "Peter"

Nun soll er im Ordner alle Textdateien durchsuchen nach einer Datei die
irgendwas mit "Peter" zu tun hat.
Die Datei kann auch: "Hallo Peter.txt" heißen und er sollte die Datei
ausgeben in einer liste.

Ich bitte euch um Vorschläge.

Ps: Mein größtest Problem ist es den PC klar zumachen das er alle
Dateien im Ordner durchsuchen soll.

mfg

Fantrixx
 

L-ectron-X

Gesperrter Benutzer
In diesem Thread findest du eine Klasse, die alle Dateien eines Verzeichnisses in einem Array sammelt und zurückgibt. Du kannst auch Dateien eines bestimmten Typs vorgeben. Im Prinzip brauchst du dann nur noch das Array durchlaufen und dir die Dateien nach deinen Kriterien ansehen.

Vielleicht kannst du es gebrauchen.
 

meez

Top Contributor
Oder hier:

Code:
	public void getRecursiveFiles(List files, File baseDirectory, boolean addDirectories) {
		File[] f = baseDirectory.listFiles();		
		for (int n = 0; n < f.length; n++) {
			if (f[n].isDirectory()) {
				if (addDirectories) {
					files.add(f[n]);
				}
				getRecursiveFiles(files, f[n], addDirectories);
			} else {
				files.add(f[n]);
			}
		}
	}

Aufrufen:

Code:
	List files = new ArrayList();
	getRecursiveFiles(file, new File("."), false);
	//Ab hier ist die Liste mit allen Files gefuellt
 

fantrixx

Bekanntes Mitglied
meez hat gesagt.:
Oder hier:

Code:
	public void getRecursiveFiles(List files, File baseDirectory, boolean addDirectories) {
		File[] f = baseDirectory.listFiles();		
		for (int n = 0; n < f.length; n++) {
			if (f[n].isDirectory()) {
				if (addDirectories) {
					files.add(f[n]);
				}
				getRecursiveFiles(files, f[n], addDirectories);
			} else {
				files.add(f[n]);
			}
		}
	}

Aufrufen:

Code:
	List files = new ArrayList();
	getRecursiveFiles(file, new File("."), false);
	//Ab hier ist die Liste mit allen Files gefuellt

Was hier nicht verstehe ist wo nachdem Wort gesucht wird das der Benutzer in das Textfeld eingegeben hat ?

EDIT: Achja und was ist das baseDirectory ? ist das der ordner in dem er suchen soll ?

EDIT2: ich habe in dem Code noch ein Fehler gefunden unzwar bei "files.add(f[n]);" wird f[n] übergeben aber man darf dort kein object übergeben es geht nur String.
 

meez

Top Contributor
Hier wird gar nichts "gesucht"...Das sammelt nur alle Files zusammen...
Ein wenig musst du schon selber uebrlegen...;)
 

fantrixx

Bekanntes Mitglied
Also sammelt es alle Files zusammen und added es in die Liste ? Und bitte auf EDIT2 von meine vorherigen Post schauen ;)
 

meez

Top Contributor
EDIT2: ich habe in dem Code noch ein Fehler gefunden unzwar bei "files.add(f[n]);" wird f[n] übergeben aber man darf dort kein object übergeben es geht nur String.

:?: Das ist alles ok..Da wird das File zur Liste hinzugefügt...
Jetzt gehst du halt die List durch, und schaust ein wenig mit indexOf(), ob der Suchbegriff im Namen oder in der Datei vorkommt...
 

fantrixx

Bekanntes Mitglied
Ich komme zurzeit nicht weiter. Ich bin jetzt gerade dabei alle Dateien auszulesen und in eine Liste zu packen um danach die DateiNamen mit indexOs() durch zu suchen. Nur kommen immer diese Dummen Fehler wie z.b:

Code:
search.java:58: cannot resolve symbol
symbol  : class ArrayList 
location: class search
         files = new ArrayList();
                     ^
search.java:76: cannot resolve symbol
symbol  : method add (java.io.File)
location: class java.awt.List
                   files.add(f[n]);
                        ^
search.java:80: cannot resolve symbol
symbol  : method add (java.io.File)
location: class java.awt.List
               files.add(f[n]);
                    ^
3 errors


Unten siehst du mal mein Programm wie weit es zurzeit ist ...



Code:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

public class search extends Frame {
  // Anfang Variablen
  private TextField searchTF = new TextField();
  private Button searchB = new Button();
  private List results = new List();
  public String searchS = "";
  public boolean found = false;
  public String searchDir = "";
  public String[] dataList;
  lyric l1;
  public int anzahl;
  List files;

  // Ende Variablen

  public search(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); }
    });
    int frameWidth = 300;
    int frameHeight = 300;
    setSize(frameWidth, frameHeight);
    Panel cp = new Panel(null);
    add(cp);
    // Anfang Komponenten

    searchTF.setBounds(96, 8, 185, 24);
    searchTF.setText("");
    cp.add(searchTF);
    searchB.setBounds(8, 8, 75, 25);
    searchB.setLabel("Search");
    cp.add(searchB);
    searchB.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        searchBActionPerformed(evt);
      }
    });

    results.setBounds(8, 48, 273, 217);
    cp.add(results);
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Ereignisprozeduren
  public void searchBActionPerformed(ActionEvent evt) {
         searchS = searchTF.getText();
         count();
         files = new ArrayList();
         searchIt(results, new File(l1.saveS), false);
  }
  public void count() {
         File dir = new File(l1.saveS);
         File[] arr = dir.listFiles(new FilenameFilter(){
            public boolean accept(File dir, String name) {
                if(name.toLowerCase().endsWith(".txt")) return true;
                return false;
            }
         });
         anzahl = arr.length;
  }
  public void searchIt(List files, File baseDirectory, boolean addDirectories) {
         File[] f = baseDirectory.listFiles();
         for (int n = 0; n < f.length; n++) {
             if (f[n].isDirectory()) {
                if (addDirectories) {
                   files.add(f[n]);
                }
                searchIt(files, f[n], addDirectories);
             } else {
               files.add(f[n]);
             }
         }
  }
  public void getClass(lyric l1) {
         this.l1 = l1;
  }
  // Ende Ereignisprozeduren

  public static void main(String[] args) {
    new search("search");
  }
}
 

fantrixx

Bekanntes Mitglied
Das importieren hat zur folge:

search.java:11: reference to List is ambiguous, both class java.util.List in java.util and class java.awt.List in java.awt match
private List results = new List();
^
search.java:18: reference to List is ambiguous, both class java.util.List in java.util and class java.awt.List in java.awt match
List files;
^
search.java:72: reference to List is ambiguous, both class java.util.List in java.util and class java.awt.List in java.awt match
public void searchIt(List files, File baseDirectory, boolean addDirectories) {
^
search.java:11: reference to List is ambiguous, both class java.util.List in java.util and class java.awt.List in java.awt match
private List results = new List();
^
search.java:11: java.util.List is abstract; cannot be instantiated
private List results = new List();
^
search.java:47: cannot resolve symbol
symbol : method setBounds (int,int,int,int)
location: interface java.util.List
results.setBounds(8, 48, 273, 217);
^
search.java:48: cannot resolve symbol
symbol : method add (java.util.List)
location: class java.awt.Panel
cp.add(results);
^
7 errors
 

Sky

Top Contributor
weil es eine java.awt.List und eine java.util.List gibt... wenn Du beides importierst, so ist nicht klar, welche gemeint ist...

also entweder Importe anpassen oder java.util.List verwenden.
 

fantrixx

Bekanntes Mitglied
Stimmt habe ich auch eben erst gelöst ;)
Nun aber sagt er mir immer noch die gleichen Erros:

search.java:58: cannot resolve symbol
symbol : class ArrayList
location: class search
files = new ArrayList();
^
search.java:76: cannot resolve symbol
symbol : method add (java.io.File)
location: class java.awt.List
files.add(f[n]);
^
search.java:80: cannot resolve symbol
symbol : method add (java.io.File)
location: class java.awt.List
files.add(f[n]);
^
3 errors

Was mit hierbei bischen Strange vorkommt ist die deklaration:

Code:
List files = new ArrayList();
 
B

bygones

Gast
er erkennt files nicht als java.util.List an, sondern als java.awt.List, daher kennt er die entsprechenden Methoden nicht.

wie schon gesagt - entweder die imports korrekt anpassen oder explizit immer sage java.util.List
 

meez

Top Contributor
fantrixx hat gesagt.:
Was mit hierbei bischen Strange vorkommt ist die deklaration:
Code:
java.util.List files = new ArrayList();

Du kannst auch alle List's durch ArrayList ersetzen...(oder Vector)
Ich benutz halt lieber das Interface, da ich dann unabhängig von der Impl bin.

Code:
ArrayList files = new ArrayList();
 

fantrixx

Bekanntes Mitglied
Hi, so nachdem ich nun ein Tag drüber geschlafen habe bin ich auf eine neue Idee gekommen. So erstmal mein Code:

Code:
  public void searchNow() {
         System.out.println("**Start to Search**");
         for(int i = 0; i <= anzahl; i++) {
                 f1[i] = new File(saveS);
                 System.out.println(f1[i].listFiles());
         }
         System.out.println("**Search Complete**");
  }

Ich werde versuchen erstmal mit der Methode oben alle Strings die in dem Ordner sind auszulesen und dann werde ich diese Array Liste mit .getName() in String arrays abspeichern und danach wohl mit indexOf() oder irgendwas anderes Bearbeiten ?! Ich weiss das gleiche habt ihr auch gesagt :) aber mir ist meine Lösung bischen einfacher :D
Am besten mal eure meinungen rein schreiben.

EDIT: Ach ja nur so zwischen durch er bekommt eine NullPointer Ex. bei:

Code:
f1[i] = new File(saveS);

die Var. saveS gibt es und es steht auch das was drine.
File f1[] wurde auch schon angegeben ?
 

meez

Top Contributor
:?: Das was du da hast, macht gar nichts...

Hier, hab grad einen guten Tag:
Code:
	public static void main(String[] args) {

		String search = "<dein suchstring>";
		File basedir = new File("<Dein basis-such directory>");

		List files = new ArrayList();
		List found = new ArrayList();		
		getRecursiveFiles(files, basedir, false);
		for (int n = 0; n < files.size(); n++) {
			File file = (File) files.get(n);
			if (file.getAbsolutePath().indexOf(search) > -1) {
				found.add(file);
				continue;
			}			
			try {
				BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
				for (String buffer; (buffer = in.readLine()) != null;) {
					if (buffer.indexOf(search) > -1) {
					found.add(file);
					break;
				}
				in.close();				
			} catch (IOException e) {}
		}

		// Hier sind in der Liste "found" alle Files, 
		// die entweder im Namen oder im Inhalt den Suchstring search enthalten

	}
 

fantrixx

Bekanntes Mitglied
So der erste Teil ab dem "if" schaut auf den Dateinamen? oder ?
Und der zweite teil ab dem "try" schaut in die Datei hinein ?

Gut ok nun frage ich mich woher die Methode "getRecursiveFiles" herkommt ?
 

meez

Top Contributor
fantrixx hat gesagt.:
Gut ok nun frage ich mich woher die Methode "getRecursiveFiles" herkommt ?


Ueber die haben wir die letzten 15 Posts geredet...:!:
Ein bisschen selbst mitdenken würde nicht stören *kopfschüttel*....
 

fantrixx

Bekanntes Mitglied
So ich habe mir nun noch eine eigene Methode gebastelt und habe das raus:

Code:
File[] files = file.listFiles(new FilenameFilter() {
     public boolean accept(File dir, String name) {
         File f = new File(dir, name);
         return (f.isFile() & f.getName().indexOf(search) != -1);
     }

});

Sie ist noch nicht ganz fertig hat nur noch einen kleinen Fehler aber ich komme nicht auf die Lösung...
Was haltet ihr von der Methode.

Habe mir selbsteine gemacht, weil die Lösungen von euch mir bischen zu hoch waren.
 

meez

Top Contributor
Code:
File[] files = file.listFiles(new FilenameFilter() {
     public boolean accept(File file) {
       return !file.isDirectory() && file.getName().indexOf(search) != -1;
     }
});


So...Sucht einfach nicht rekursiv...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Alle Attribute eines Source-Files auslesen Allgemeine Java-Themen 2
Zrebna Wie ermittelt man alle testbaren (zu testenden) Klassen in seinem Maven-Projekt? Allgemeine Java-Themen 23
_user_q Alle Kombinationen von "0000" bis "FFFF" kompakt schrieben Allgemeine Java-Themen 13
_user_q JavaFX Robot alle Unicode-Zeichen schreiben lassen können Allgemeine Java-Themen 12
S Bookmark HTML Datei einlesen, alle Links erhalten und manche editieren..? (aktuell JSoup) Allgemeine Java-Themen 4
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
Kingamadeus2000 Alle mehrfach vorkommenden Buchstaben rekursiv aus einem String entfernen. Allgemeine Java-Themen 6
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
8u3631984 Generelle Log4j.xml für alle Module Allgemeine Java-Themen 5
L Farbverlauf RGB alle Farben Allgemeine Java-Themen 28
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
S Alle Dateinamen ermitteln Allgemeine Java-Themen 22
F Wie bekommt man alle Filenamen eines Webserver Verzeichnisses Allgemeine Java-Themen 6
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
MaxG. Best Practice Alle Kombinationen berechnen Allgemeine Java-Themen 3
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
C BufferedReader/BufferedWriter schreibt nicht alle Bytes Allgemeine Java-Themen 2
J Alle Unit Tests in Maven Modul Projekt ausführen Allgemeine Java-Themen 7
S Anwendung die alle Abhaengigkeiten einer Library listet..? Allgemeine Java-Themen 5
T Alle Kombinationen aus zwei Arrays Allgemeine Java-Themen 8
K Nicht alle class-Dateien im JRE? Allgemeine Java-Themen 2
I Alle logs von Logger bekommen Allgemeine Java-Themen 3
U javax.mail.Folder.list() zeigt nicht alle Ordner Allgemeine Java-Themen 5
K Classpath Alle Classen aus einem Package lesen Allgemeine Java-Themen 7
L Alle möglichen Additionen (Rekursiv) Allgemeine Java-Themen 3
KaffeeFan Methoden replace alle Buchstaben Allgemeine Java-Themen 3
S Alle Methodenaufrufe eines Threads notieren..? Allgemeine Java-Themen 7
U Koordinaten alle Pixel eines Dreiecks zeichnen ausgeben Allgemeine Java-Themen 5
Z Eclipse hängt sich alle paar Sekunden auf (Keine Rückmeldung). Allgemeine Java-Themen 4
Seikuassi Alle Escape-Sequenzen in einem String ersetzen Allgemeine Java-Themen 4
F Java Spintax: Alle Kombinationen Erzeugen Allgemeine Java-Themen 2
Sogomn Klassen Alle in eine Klasse Allgemeine Java-Themen 11
P Methoden Alle Kombinationen aus 2 Karten berechnen Allgemeine Java-Themen 2
B Threads Barrier mit wait()/notify() aber nicht alle Prozesse terminieren Allgemeine Java-Themen 2
S .jar hat nicht alle Klassen ??? Allgemeine Java-Themen 10
T Wie kann ich alle existierenden Java-Klassen anzeigen lassen? Allgemeine Java-Themen 10
M Zufälligen String generieren und alle 5 Minuten ändern Allgemeine Java-Themen 2
M RegEx alle Matches ausgeben Allgemeine Java-Themen 5
A Applet Alle Threads beim schließen des Applets beenden Allgemeine Java-Themen 8
C SwingWorker.cancle(true) tötet alle Worker Allgemeine Java-Themen 3
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
T Alle Instancen einer Klasse auflisten Allgemeine Java-Themen 13
S Programm das alle aufgerufenen Methoden ausgibt..? Allgemeine Java-Themen 6
S Alle Kombinationen aus ArrayList - Potenzmenge Allgemeine Java-Themen 7
D Alle Variablen final setzen ? Allgemeine Java-Themen 26
brunothg Alle Kombiationen von n Ziffern Allgemeine Java-Themen 2
M Erste Schritte alle xmlFiles in zugehörige pdfFiles einlesen Allgemeine Java-Themen 4
B Variablen Alle RenderingHints.Keys (KEY_*) in Array + alle RenderingHints.Keys (VALUE_*) in Object[] Allgemeine Java-Themen 8
D generische Klasse für alle Maps (nicht Collections :-)) Allgemeine Java-Themen 11
E Logger loggt nicht alle Level Allgemeine Java-Themen 2
S Aus einer Liste<Oberklasse> alle Elemente die eine bestimmte Unterklasse von Oberklasse haben filter Allgemeine Java-Themen 8
K String: alle X Zeichen Zeilenumbruch Allgemeine Java-Themen 3
F Alle Exceptions abfangen Allgemeine Java-Themen 4
nrg JS als ScriptEngine - alle Punkte ersetzen Allgemeine Java-Themen 4
A Bildschirmauflösung geändert - alle Bildschirminhalte verschoben - was tun? Allgemeine Java-Themen 7
C Alle Klassen eines Packages lesen und instanzieren? Allgemeine Java-Themen 9
B Alle Exceptions auf einmal abfangen Allgemeine Java-Themen 4
S Warum packt er nicht alle Dateien? Allgemeine Java-Themen 13
J Alle Tage eines Jahres Allgemeine Java-Themen 2
AlexSpritze Alle Domains oder FQDN von einem Server erfragen? Allgemeine Java-Themen 2
Spot84 alle kombinationen einer string arraylist Allgemeine Java-Themen 2
S Alle Elemente von zwei Listen vergleichen Allgemeine Java-Themen 10
J Konstrukt um alle Paare und Tripel einer Punkte-Menge bilden Allgemeine Java-Themen 12
B Alle möglichen Buchstabenkombinationen in einem String Allgemeine Java-Themen 7
P alle zusammanhaengenden teilgraphen Allgemeine Java-Themen 7
A alle nicht-dplikate finden Allgemeine Java-Themen 14
M Wie kann ich alle System.out Strings in ein log window umleiten? Allgemeine Java-Themen 6
E Alle unter Prozesse der beim schließen mit schließen Allgemeine Java-Themen 3
A An alle Cracks: Anwendung beenden mit ShutdownHook? Allgemeine Java-Themen 13
J Logger gibt nicht alle Level aus Allgemeine Java-Themen 3
M alle möglichen Zahlenkombinationen Allgemeine Java-Themen 5
B in welchem verzeichnis liegen alle installierten klassen? Allgemeine Java-Themen 6
hdi Für alle fleissigen Helfer! Allgemeine Java-Themen 15
N Alle Fehler ausgeben? Allgemeine Java-Themen 4
J Zweiter Prozess der alle x Sekunden etwas abfragen soll Allgemeine Java-Themen 2
O Auf alle Events reagieren Allgemeine Java-Themen 3
B J-Unit Tests. Alle Tests eines Package einsammen. Allgemeine Java-Themen 4
U alle Dateien eines Ordners innerhalb einer JAR auflisten Allgemeine Java-Themen 6
S toString() für alle Member einer Klasse. Allgemeine Java-Themen 6
G Alle möglichen Konfigurationen eines Baumes Allgemeine Java-Themen 4
C Alle Möglichen Substrings der Länge k aus String extrahieren Allgemeine Java-Themen 9
C Alle Bilder eines binären Arrays ausgeben Allgemeine Java-Themen 3
G Alle möglichen Permutationen einer Folge n Allgemeine Java-Themen 3
V Alle Klassen eines Package auflisten? Allgemeine Java-Themen 6
H JTable Löschen [Alle Zeilen aufeinmal Löschen] Allgemeine Java-Themen 6
@ RegEx: Alle Sonderzeichen ausser dem Punkt Allgemeine Java-Themen 4
G Alle Möglichen Kombinationen einer Liste Allgemeine Java-Themen 11
H Alle möglichen Hochkommata ausschließen Allgemeine Java-Themen 6
M Gibt es ein Jar - das alle Componente Automatisch anpasst? Allgemeine Java-Themen 14
K Suche alle Objekte einer bestimmten Klasse Allgemeine Java-Themen 2
N Unter Mac Os X alle laufenden Prozesse ausgeben Allgemeine Java-Themen 3
S Änderung an Proberties datei an alle User weitergeben? Allgemeine Java-Themen 7
P Observer, nicht alle updates bearbeiten Allgemeine Java-Themen 2
der JoJo [TreeSelection] wie bekomme ich alle Elemente Allgemeine Java-Themen 4
G Alle Zeichen des Alphabets ausgeben Allgemeine Java-Themen 4
G Alle Möglichkeiten n Elemente Anzuordnen. Allgemeine Java-Themen 13
0 Alle Teiler einer Zahl performant berechnen? Allgemeine Java-Themen 9
J Funktion alle Möglichkeiten berücksichtigen Allgemeine Java-Themen 5
O Warten bis alle gestarteten Threads beendet sind? Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben