Zum Inhalt springen

Files Vergleichen


Java_Neuling

Empfohlene Beiträge

Morgen,

ich hab wieder mal ein problem :( und zwar hab ich einen Ordner mit einer unbestimmten anzahl an Files, in dem Ordner möchte ich je nach Eingabe des Users die Files ausblenden, die nicht der Such-Eingabe entsprechen (mache ich mit dem FileFilter funktioniert auch wenn man nur den Anfang oder das Ende der Datei abfrägt) jetzt muss ich aber auch noch ne suche dafür einbauen das wenn z.B. *test* eingegeben wird also mit den Sternen am Anfang und am Ende dass mir alle Files angezeigt werden die 'test' enthalten kann mir da jemand helfen :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich dich richtig verstehe, ist für dich an dieser Stelle "Reguläre Ausdrücke" ein Thema, mit dem du dich beschäftigen könntest. Mit regulären Ausdrücken, auch Regular Expressions genannt, kannst du Zeichenketten auf eben solche Merkmale untersuchen, wie zum Beispiel Teilstrings mit, die durch Sternchen * maskiert wurden.

Weitere Infos findest du unter Anderem auf folgenden Seiten:

Wikipedia-Artikel zu RegExp

RegExp-Tutorial auf regenechsen.de

Forensuche von fachinformatiker.de

Ansonsten schau mal im Internetz nach "regular expressions", ergänzend hängst du noch ein "tutorial" ran.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erst mal danke für die links :) aber entweder ich bin blind oder da steht nix darüber wie ich des in mein programm mit einfügen kann sondern nur was reg. expr. sind... ich bräuchte so nen befehl zu den expr. wie zb.

- file.getName().toLowerCase().startsWith(String);

- file.getName().toLowerCase().endsWith(String);

ich hoff ihr könnt mir helfen...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das einzige was ich gefunden hab wo ich denk das es mir weiter helfen könnte ist das hier

if (String.matches(String)) 

{}
aber krieg ich auch nicht wirklich hin... kann doch net sein das es so einfach ist und ich es nicht hin krieg :confused: dann hätt ich noch ne andere frage und zwar kann es sein das ich mit dem FileFilter in dem Fall falsch lieg weil ich des irgendwie nicht hin krieg das ich dateien filtere außer mit den befehlen

file.getName().toLowerCase().startsWith(String);

file.getName().toLowerCase().endsWith(String);	

Irgendwie steh ich grad voll aufm Schlauch :rolleyes::rolleyes::rolleyes:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erst mal danke nochmal für die posts! :) ich hab des problem nun so gelöst das ich aus dem File einen String mach also aus dem Dateinamen danach durchsuche ich den String teil für teil nach den gesuchten Zeichen hier der Code:



for(int i = 0; i < (str_original.length() - str_vergleich.length()); i++)

{ 

     /*Vergleiche den Original-String von der Position 'i' mit dem Vergleichs-String von der Position '0' mit der Länge vom Vergleichs-String*/


     boolean b = str_original.regionMatches( i, str_vergleich, 0, str_vergleich.length());

}

str_original = der zu durchsuchende Dateiname

str_vergleich = ist die zeichenfolge die gesucht wird

anschließend mach ich aus dem String wieder ein File... (ich weiß ist nicht die schönste lösung... :()

ich hoffe ich konnte es einigermaßen erklären was ich da mach :D auf alle fälle liegt mein problem nun darin dem FileChooser zu sagen das nur die Dateien ausgegeben werden die auch meinen Suchkriterien entsprechen :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mit

if (String.matches(String)) 

{}
lagst du schon mal gar nicht falsch. Aber was genau kriegst du bei Verwendung der Methode String.matches(String) nicht hin? Ich kann nur vermuten, dass dein regulärer Ausdruck nicht korrekt war oder dass der Code "drumherum" nicht ganz richtig läuft. Denn Sourcecodes wie
private boolean fileMatchesRegExp(File aFile, String aRegularExpression) {

	return aFile.getName().matches(aRegularExpression);

}

sollten bei solch übersichtlichen Ausmaßen keine Probleme darstellen und einwandfrei funktionieren.

Und diesen Spaghetti-Code mit der Schleife...? Eieiei...! Nagut, ganz sooo schlimm ist es nicht, aber das macht es noch lange nicht zu schönem Code. Es gibt sehr viel elegantere Lösungen. Finde und nutze sie.

Lies dich durch die Tutorien der von Pinhead und mir gesendeten Links und du wirst fündig.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich steh grad total aufm Schlauch und hoffe das mir des vllt weiter hilft

private boolean fileMatchesRegExp(File aFile, String aRegularExpression) {

	return aFile.getName().matches(aRegularExpression);

}

also der vergleicht hier doch "aFile" mit "aRegularExpression" oder :confused:

aber wie wird "aRegularExpression" mit dem jeweiligen Suchbegriff gefüllt ???

Ich krieg des ding immer noch nicht hin :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jetzt weiß ich warum es nicht ging...

if (file.getName().toLowerCase().matches(str_suchEingabe))	
wenn ich es mit matches mache erkennt er das file nicht
chooser.setFileFilter( new javax.swing.filechooser.FileFilter()

         {

             public boolean accept( File file )

             {

wenn ich aber den FileFilter vom FileChooser einsetze wirds erkannt... ich hab nur keine ahnung wie ich des bei dem matches mit einbauen soll :( darum hats die ganze zeit nicht geklappt und ich dachte es liegt am matches...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Auszug aus der API von java.lang.String:

boolean java.lang.String.matches(String regex)

Tells whether or not this string matches the given
.

Schau Dir mal den Link dazu an, der verweist auf die Dokumentation zur Klasse java.util.regex.Pattern. Dort werden Grundlagen von Regulären Ausdrücken in Java erklärt, für Anfänger zunächst äußerst kryptisch.

In der Insel wird das ganze auf Deutsch erklärt.

Sei gewarnt: Reguläre Ausdrücke sind teilweise recht tricky, und dadurch, dass man die Ausdrücke im Java-Quellcode nochmal escapen muss, wird das ganze etwas sehr unansehnlich:

1) Z.B. ein Backslash \ soll gematcht werden.

2) Das muss man dann escapen in der Regex: \\

3) Im Java-Quelltext muss man jedes Backslash nochmal escapen, denn es hat ja für den Quelltext eine spezielle Bedeutung, also wird daraus: \\\\

(Vier Backslashes, nur um ein einzelnes Backslash als RegEx zu matchen)

Behalte das im Hinterkopf, wenn Du Dich an Reguläre Ausdrücke in Java ranwagst :)

Viel Erfolg!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke erst mal für die Hilfe zu den Reg. Expr. aber kann mir auch jemand sagen wie ich dem FileFilter sag das er mir nur die zutreffenden Dateien anzeigt :confused: startsWith() und endsWith() sind mir bekannt aber sind auch keine große hilfe bei den Reg. Expr.

tut mir leid falls ich mich grad dumm anstelle aber bin kurz vor dem durch drehen :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus,

ich les hier schon ein bisschen mit und weiß nicht, wo Dein Problem ist. Dich interessiert der FileFilter erst mal nicht. Du willst Dich in Regular Expressions einarbeiten, um zwei Zeichenketten miteinander zu vergleichen. Dann willst Du eine für Dich passende RegEx entwerfen und zum Schluss zwei Zeichenketten damit vergleichen. Ob die aus einem FileFilter oder aus einem File oder sonstwoher kommen, ist völlig egal.

Lies doch bitte noch mal die Links, die bisher gepostet wurden, arbeite Dich in die Thematik ein und versuche nicht, irgendwas irgendwie hinzukriegen. Es dauert genau so lange und Du hast am Schluss was davon.

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Anscheinend hast du nicht richtig mitgelesen... ich hab einen FileChooser der auf nen bestimmten Ordner zeigt über den FileChooser lösche und mache ähnliches mit Dateien... jetzt will ich über ein Textfeld ne bestimmte Zeichenfolge eingeben die mir gesucht wird also alle Dateinamen der Dateien im Ordner sollen nach dem String durchsucht werden und anschließend will ich nur die Dateien angezeigt bekommen, die auf die Suche zutreffen also wie soll ich des dem FileChooser sagen wenn nicht mit dem FileFilter???

Link zu diesem Kommentar
Auf anderen Seiten teilen

Naja. kingofbrain hat schon irgendwie recht. Wenn man mal über den Thread liest, versteht man nicht wirklich, was konkret Dein Problem ist. Daß Du in einem FileChooser nur bestimmte Dateien anzeigen willst, ist mittlerweile klar. Aber wo genau es bei der Implementierung hakt, vermag ich nach dem Durchlesen nicht zu sagen.

Wobei ich allerdings erahne, woran es hängen könnte. Wenn Du Dir die API des abstrakten FileFilters oder das Tutorial How to Use FileChoosers mal ansiehst, erkennst Du, daß Du im FileFilter eine Methode "boolean accept(File)" implementieren mußt. Sie bekommt die Dateien, die im FileChooser angezeigt werden, iterativ übergeben und bestimmt mit dem Rückgabewert, ob die übergebene Datei im FileChooser anzuzeigen ist oder nicht. Wenn Du also einen FileFilter implementierst, der aus dem übergebenen File-Objekt den Dateinamen liest und diesen mit der Eingabe vergleicht und entsprechend true oder false zurücklieferst, liegst Du schon gar nicht so falsch.

Anschließend mußt Du noch dafür sorgen, daß der FileFilter immer mit der aktuellen Eingabe versorgt wird und der FileChooser diesen aktualisierten FileFilter nutzt, um Dateien zu filtern.

Vielleicht hilft das ja. Und ja, ich habe gesehen, daß Du schon etwas mit dem FileFilter getan hast. Aber sorry, aus dem Codegewusel und den Textfetzen konnte ich nicht konkret rauslesen, wo Dein Projekt jetzt ist bzw. wo Dein Problem liegt. Daher meine Bitte an Dich: Überlege vor dem Klick auf "Absenden" ob jeder hier Lesende Deinen Text verstehen kann und überprüfe, ob alle notwendigen Infos und Codeschnipsel vorhanden sind. Das erleichtert es allen Beteiligten ungemein.

Und bitte bekomme das nun nicht in den falschen Hals ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus nochmal,

doch doch, ich habe schon richtig mitgelesen. Deshalb hat es ja so lange gedauert, bis ich mich das erste mal gemeldet habe. :)

Mir ist Dein Problem immer noch nicht klar. Das einzige, das ich verstanden habe, ist, das Du Dateinamen vergleichen willst, aber mit startsWith und endsWith nicht klar kommst. Regular Expressions findest Du recht kompliziert, aber Du hast schon mal was mit dem FileChooser und einem FileFilter gemacht, was aber nicht so richtig das macht, was Du brauchst. :)

Präzisier doch mal Dein Problem. Bis jetzt bin ich wirklich der Meinung, Du willst wissen, welche RegEx für Dich das richtige ist. Aber da ich ja wirklich falsch liegen kann, melde ich mich erst wieder, wenn mir Dein Problem klar ist. Viel Erfolg!

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die Posts aber ich hab keine ahnung woran es liegt das wir uns nicht verstehen kann auch sein das ich keine ahnung hab wie ich mich ausdrücken soll weil ich eigentlich erst angefangen hab zu programmieren...

naja ich schildere mein Problem einfach nochmal (auch wenn die Gefahr besteht das ich mich nur wiederhole und wir uns immer noch nicht verstehen :D) also ich hab einen FileChooser in ein Frame eingefügt und dem FileChooser seine Standart Buttons (Öffnen und Speichern wars glaub ich) entfernt.

Danach hab ich auf dem Frame einige Buttons und ein Textfeld hinzugefügt mit den Buttons lösch ich die gewählten Files oder tue ähnliches des klappt ja alles... dann hab ich aber noch das TextFeld zum Suchen von bestimmten Dateien z.B. kann ich nach Dateiendungen suchen mit endsWith(".txt") oder ich lasse nach dem Beginn des Dateinamens suchen mit startsWith("test") jetzt will ich aber mitten im Dateinamen suchen können und ich habe auch verstanden das ich dazu die Reg. Exp. benutzen muss nur ich hab keine Ahnung wie ich die übereinstimmenden Files meinem FileFilter übergeben soll...

Ich habe auch schon drüber nach gedacht im FileFilter einfach IndexOf zu verwenden wäre wahrscheinlich am einfachsten gewesen das ich abfrage wenn die Rückgabe von indexof ungleich -1 ist, die Datei anzeigen! nur der FileFilter macht mir Probleme, da ich keine ahnung hab wie ich dem FileFilter die Files, die angezeigt werden sollen übergeben soll und weil ich sonst keinen Weg kenne Dateien ausblenden zu lassen muss ich mit dem FileFilter arbeiten :( ich hoffe ihr versteht mich jetzt ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Des ist wonach ich gesucht hab

chooser.setFileFilter( new javax.swing.filechooser.FileFilter(){  

	      public boolean accept( File file )				

	      { 							

	    	 return (file.isDirectory() ||  				

	                 file.getName().toLowerCase().endsWith(".txt")) && file.getName().toLowerCase().indexOf("at") != -1;	      

              } 

	           public String getDescription() 					

	      {  							

	    	  return "Text-Dateien (*.txt)"; 

	      } 

	   });

indexOf("at") != -1; --> wenn man des "at" durch den gesuchten String ersetzt hat man die lösung ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...