Java String mit Platzhalter durchsuchen

fireblade_xx

Commodore
Registriert
Okt. 2007
Beiträge
5.065
Hallo zusammen,

ich importiere eine TXT Datei (Logfile von Avira) per BufferedReader und möchte danach den Stream nach "Update erfolgreich" durchsuchen.

Mein Problem ist, dass das Logfile keine Trennzeichen hat und somit alles in einer Zeile steht.

Wie kann ich nun den ganzen Stream nach dem kleinen Teil durchsuchen?


Danke!

Gruß
Kevin
 
Du könntest den Text mit BufferedReader::readLine() in einen String packen und darauf dann mit indexOf("Update erfolgreich") die Position des Teils herausfinden.
 
Hi Versuchs mal damit:
Code:
Pattern p  = Pattern.compile("Update erfolgreich");
Matcher m = p.matcher("Dein inputstream");
while(m.find()) {
    System.out.println("Sample found at: "+m.start()+" Value: "+m.group());
}

Greetings

don.dope
 
Müsste doch eigentlich so gehen, oder?

for (int b=0;b<400;b++)
{


if (list.contains("Update fehlgeschlagen!") == true)

System.out.println("Achtung Fehler!");

}
 
So ich habe ein wenig umgebaut und es funktioniert jetzt auch wie es soll.

Mein Quelltext:

Code:
String text = "";
try 
{
    BufferedReader input = new BufferedReader(new FileReader([B]"C:\\Logs\\log.txt"[/B]));
    String line;

    while ((line = input.readLine()) != null) {
        text = text + '\n' + line;
    }
    if (text.endsWith("\n"))
        text = text + "\n";

    input.close();
    
} catch (FileNotFoundException ex) {
    ex.printStackTrace();
} catch (IOException ex) {
    ex.printStackTrace();
}
//System.out.println(text);

StringTokenizer st = new StringTokenizer(text);
int n = 0;
while(st.hasMoreTokens())
{
    if(st.nextToken().equals("fehlgeschlagen."))
    {
        n++;
        st.nextToken();
    }
}
System.out.println("In der Datei ist das Wort  " + n + "mal enthalten");

Ist es auch möglich ein ganzes Verzeichnis an Dateien einzulesen?

Mein Problem ist, dass ich einen Ordner voller Avira Updates Logs habe und das Programm soll als Überwachung dienen, ob alle Updates durchgelaufen sind. Die Dateinamen sind ja immer fortlaufend und ich will ja nicht jeden Tag mein Pfad ändern.
 
Ist es auch möglich ein ganzes Verzeichnis an Dateien einzulesen?
Klar. Ist ganz einfach:
Du erstellst dir ein File-Objekt f mit dem Pfad zum entsprechenden Ordner.
Dann machst du f.list() und bekommst ein Feld von Strings mit den einzelnen Elementen des Ordners.
Über das Feld kannst du dann in einer Schleife iterieren und deinen Code auf jedes einzelne Element anwenden.

Gruß Timo
 
Nochmal eine ganze dumme Frage: Habe bisher immer mit Eclipse 3.5 gearbeitet, aber heute auf den neuen Rechner Eclipse 3.7 Indigo installiert und ich suche meine Visual Class wie blöde.

Es soll ja der WindowBuilder stattdessen dazugekommen sein. Wo ist der im Paket, oder muss der nachinstalliert werden?

edit: Noch ein kleines Problem: Ich erhalte die Dateien als .log. Wenn ich den Inhalt einfach in eine TXT kopiere und speichere liest eclipse es jetzt ohne Probleme, allerdings wenn ich das .log direkt einlese
ist alles mit Vierecken und anderen Zeichen zwischen den original Zeichen gespickt. UTF-8 im Eclipse brachte nichts.
 
Zuletzt bearbeitet:
Was meinst du mit "Eclipse ließt"? Sollte nicht die JVM die Datei einlesen? Und der dürfte doch herzlich egal sein, was für eine Endung die zu lesende Datei hat. Vielleicht musst du irgendwo bei File die Kodierung angeben.

Gruß Timo
 
Ja ich lasse das Programm gerade in Eclipse noch laufen und wenn ich mir den Array ausgebe bekomme ich in der Konsole nur wirre Zeichen -> er wird zu 100% richtig ausgeben wenn ich das ganze als TXT einlese.
 
Probier mal die Datei so zu lesen:
Code:
File file = new File(pathToFile);
int bufferSize = 10240;
Reader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"), bufferSize);
 
Danke für die Antwort!

Das Problem ist, ich bekomme deinen Code nicht ganz in meinen Quelltext integriert, da meine Schleife zum Auslesen einen Buffered Reader und keinen Reader braucht. Ich habe jetzt erstmal den Reader als Buffered Reader umgemodelt und es sieht jetzt folgendermaßen aus:

Code:
package package_001;


import java.io.*;
import java.util.StringTokenizer;
import java.io.File; 

public class  Einlesen{
public static void main (String[] args) throws IOException{


String text = "";
try 
{
	
	File f = new File("C:/Logs");
	File[] fileArray = f.listFiles();	
	
	
	
	for (int i=0;i<3;i++)
	{
		System.out.println(i);
		System.out.println(fileArray[i]);
		int bufferSize = 10240;
		[B]BufferedReader input = new BufferedReader(new InputStreamReader(new FileInputStream(fileArray[i]), "UTF-8"), bufferSize);[/B]
//		BufferedReader input = new BufferedReader(new FileReader(fileArray[i]));
		String line;

   [B] while ((line = input.readLine()) != null)[/B] {
        text = text + '\n' + line;
    }
    if (text.endsWith("\n"))
        text = text + "\n";

    input.close();
    
    StringTokenizer st = new StringTokenizer(text);
    int n = 0;
    while(st.hasMoreTokens())
    {
        if(st.nextToken().equals(""))
        {
            n++;
            st.nextToken();
        }
    }
    System.out.println("In der Datei ist das Wort  " + n + " mal enthalten");
    System.out.println(text);
    text = "";

    
}} catch (FileNotFoundException ex) {
    ex.printStackTrace();
}  catch (IOException ex) {
    ex.printStackTrace();
}
System.out.println(text);


}

}

Wenn ich ihn als Reader lasse, funktioniert mein input.readline nicht mehr.
Leider werden so die Dateien genauso durcheinander eingelesen.
 
Okay, ob du nun per Reader oder BufferedReader liest, sollte erst einmal egal sein. Reader hat keine readline() Methode. Dort gehts nur mit read():
Code:
int data;
while ((data = reader.read()) != -1) {
       char c = (char) data;
}

Anschließend schreibe ich c immer in einen StringBuilder mittels append(c).
Ich machs gerne so, da ich meist zwischen Windows- und Unix-Systemen hantiere. Da hat sich diese Art und Weise des Auslesen für mich bewährt.

Die Fehler treten also weiterhin auf, hm.
Um nochmal den Fehler zu rekapitulieren: Wenn du die Datei einliest, enthält die Variable line nicht den gewünschten Text (z. B. 23.08.2011 11:00: Update erfolgreich durchgeführt!), sondern beispielsweise "23.08.2011 11:00: Update erfolgreich durchgef⎕⎕⎕hrt!⎕⎕⎕" ?
Kannst du ein Beispiel hier posten?
Wenn du beim Einlesen debuggst, sind dann bereits beim readLine() die Zeichen enthalten?

Liegt wahrscheinlich nur am Encoding der Datei. Probiers mal mit ISO-8859-1 an Stelle von UTF-8.
 
Zuletzt bearbeitet:
Nur mal so am Rand,... bist du dir sicher, dass du nie mehr als 3 Logs lesen willst und du hast auch nicht bedacht, wenn nur 1 Log vorhanden ist.

In dem einen Fall ignorierst du eventuelle Updates und in den anderen Fall gibt es NullPointer-Execptions.


Daher würde ich einfach nachfragen, wie groß das File-Array ist und das als Endwert deiner For-Schleife nehmen.

Deine Code-Formatierung ist auch nicht sonderlich gut, da es je nach Tiefe immer weiter einrückt und bei dir steht die for-schleife weiter rechts, als die while-Schleife, wo doch die while-schleife der for untergeordnet ist.
Wäre halt deutlich einfacher lesbar, wobei der Code ja nicht sonderlich kompliziert ist, .. sollte man sich aber gleich richtig angewöhnen.

Variablen mit den Namen i und n sollte man sich auch nicht angewöhnen, wo man die hier ja wirklich leicht treffend nennen kann.

IF-Bedinungen sollten auch immer geschweifte Klammern folgen, man kann es so machen, wie du, sollte man auch auch nicht unbedingt machen. Nachher vergisst man die einmal, weil man es nicht gewöhnt ist und schwups, finde den Fehler.
 
Zuletzt bearbeitet:
Beispiel:



edit: Das mit der Größe ist nur jetzt fix, werd ich nacher noch ändern, sobald die Logs richtig gelesen werden.

edit2: Auch schon beim readline stimmt die Kodierung nicht mehr.

edit3: Hab mir gerade mal mit Notepad++ die .log genauer angesehen: Formatierung: UCS-2 Little Endian.

edit4: GELÖST!!! UTF-16 und schon klappts :D
 
Zuletzt bearbeitet:
UCS ist 16Bit. UTF-16 ist 16Bit.

Du willst es mit UTF-8 (8Bit) lesen. ... Die komischen Zeichen wären damit erklärt.
 
Super, jetzt hab ich das nächste Problem :D

Die Logs werden nicht ganz gelesen.

Äußert sich so:

Code:
0
C:\Logs\Upd-2010-09-16-14-00-33.log
Vollständiges Produktupdate
Erstellungszeitpunkt: Thu Sep 16 14:00:35 2010

Windows XP (Service Pack 3)  [5.1.2600] 32 bit
Produktinformationen:
Updater: C:\Programme\Avira\AntiVir Desktop\update.exe 10.0.0.29
Bibliothek: C:\Programme\Avira\AntiVir Desktop\update.dll 0.1.0.44

Backupverzeichnis: C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\BACKUP\
Updaterverzeichnis: C:\Programme\Avira\AntiVir Desktop\

Verwende Systemeinstellungen
[B]null[/B]
In der Datei ist das Wort  0 mal enthalten
1
C:\Logs\Upd-2010-12-03-08-24-22.log
Vollständiges Produktupdate
Erstellungszeitpunkt: Fri Dec 03 08:24:22 2010

Windows XP (Service Pack 3)  [5.1.2600] 32 bit
Produktinformationen:
Updater: C:\Programme\Avira\AntiVir Desktop\update.exe 10.0.0.35
Bibliothek: C:\Programme\Avira\AntiVir Desktop\update.dll 0.1.0.44

Backupverzeichnis: C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\BACKUP\
Updaterverzeichnis: C:\Programme\Avira\AntiVir Desktop\

Verwende Systemeinstellungen
08:24:22 [UPD] [INFO]       Prüfe ob neuere Dateien zur Verfügung stehen.
08:24:23 [UPD] [INFO]       Herunterladen von 'http://62.146.87.171/update/idx/master.idx' nach 'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\idx\master.idx'.
08:24:24 [UPD] [INFO]       Herunterladen von 'http://62.146.87.171/update/idx/wks_avira10-win32-de-pepr.info.gz' nach 'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\idx\wks_avira10-win32-de-pepr.info.gz'.
08:24:24 [UPD] [INFO]       Herunterladen von 'http://62.146.87.171/update/idx/vdf.info.gz' nach 'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\idx\vdf.info.gz'.
08:24:24 [UPD] [INFO]       Herunterladen von 'http://62.146.87.171/update/idx/ave2-win32-int.info.gz' nach 'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\idx\ave2-win32-int.info.gz'.
08:24:24 [UPD] [INFO]       Herunterladen von 'http://62.146.87.171/update/idx/hips-win32-int.info.gz' nach 'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\idx\hips-win32-int.info.gz'.
08:24:25 [UPD] [INFO]       Prüfe Modul SELFUPDATE:
08:24:25 [UPD] [INFO]       	Datei 'webcat/common/int/webcat3.dat' (lokal, Server): 589420bf7b4b2627ec2582f0e7007741 != 1e505d9adf3650bb5c12797506caf84f
08:24:25 [UPD] [INFO]       Prüfe Modul VDF:
08:24:25 [UPD] [INFO]       	Datei 'n_vdf/aevdf.dat' (lokal, Server): 7.10.14.167 < 7.10.14.171
08:24:25 [UPD] [INFO]       	Datei 'rdf/common/int/antivir0.rdf' (lokal, Server): 10.0.0.53 < 10.0.0.55
08:24:25 [UPD] [INFO]       	Datei 'ave2/win32/int/aecore.dll' (lokal, Server): 8.1.18.1 < 8.1.19.0
08:24:25 [UPD] [INFO]       	Datei 'ave2/win32/int/aehelp.dll' (lokal, Server): 8.1.15.0 < 8.1.16.0
08:24:25 [UPD] [INFO]       	Datei 'ave2/win32/int/aepack.dll' (lokal, Server): 8.2.3.11 < 8.2.4.1
08:24:25 [UPD] [INFO]       	Datei 'ave2/win32/int/aeset.dat' (lokal, Server): 8.2.4.114 < 8.2.4.118
08:24:26 [UPD] [INFO]       	Die Datei 'wks_avira10/win32/de/pepr/filelist.ini' hat das IGNORE-Flag gesetzt und wird deswegen nicht berücksichtigt.
08:24:26 [UPD] [INFO]       	Die Datei 'wks_avira10/win32/de/pepr/presetup.exe' hat das IGNORE-Flag gesetzt und wird deswegen nicht berücksichtigt.
08:24:26 [UPD] [INFO]       	Die Datei 'wks_avira10/win32/de/pepr/vcredist_x86.exe' hat das IGNORE-Flag gesetzt und wird deswegen nicht berücksichtigt.
08:24:26 [UPD] [INFO]       	Datei 'wks_avira10/win32/de/pepr/addr_file.html' ist bereits installiert und wird nicht aktualisiert.
08:24:26 [UPD] [INFO]       	Datei 'wks_avira10/win32/de/pepr/de-de/produpd.avj' ist bereits installiert und wird nicht aktualisiert.
08:24:26 [UPD] [INFO]       	Datei 'wks_avira10/win32/de/pepr/de-de/startupd.avj' ist bereits installiert und wird nicht aktualisiert.
08:24:26 [UPD] [INFO]       Prüfe Modul COMMAPDATA_AV_PROFILES:
08:24:26 [UPD] [INFO]       Prüfe Modul TEXT:
08:24:26 [UPD] [INFO]       Prüfe Modul DRV:
08:24:26 [UPD] [INFO]       Prüfe Modul HIPS:
08:24:26 [UPD] [INFO]       'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\BACKUP\' benötigt 6211773 Bytes freien Speicherplatz.
08:24:26 [UPD] [INFO]       'C:\Programme\Avira\AntiVir Desktop\' benötigt 6103508 Bytes freien Speicherplatz.
08:24:26 [UPD] [INFO]       Laufwerk: C:\, freie Kapazität: 291209216 Bytes.
08:24:26 [UPD] [INFO]       Herunterladen von 'http://62.146.87.171/update/webcat/common/int/webcat3.dat.gz' nach 'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\webcat\common\int\webcat3.dat.gz'.
08:24:26 [UPD] [INFO]       Herunterladen von 'http://62.146.87.171/update/n_vdf/vbase031.vdf.gz' nach 'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\n_vdf\vbase031.vdf.gz'.
08:24:27 [UPD] [INFO]       Herunterladen von 'http://62.146.87.171/update/rdf/common/int/antivir0.rdf.gz' nach 'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\rdf\common\int\antivir0.rdf.gz'.
08:24:27 [UPD] [INFO]       Herunterladen von 'http://62.146.87.171/update/ave2/win32/int/aegen.dll.gz' nach 'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\ave2\win32\int\aegen.dll.gz'.
08:24:30 [UPD] [INFO]       Herunterladen von 'http://62.146.87.171/update/ave2/win32/int/aeheur.dll.gz' nach 'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\ave2\win32\int\aeheur.dll.gz'.
08:24:41 [UPD] [INFO]       Herunterladen von 'http://62.146.87.171/update/ave2/win32/int/aescript.dll.gz' nach 'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\ave2\win32\int\aescript.dll.gz'.
08:24:58 [UPD] [INFO]       Engine wurde erfolgreich validiert.
08:24:58 [UPD] [INFO]       'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\.\webcat\common\int\webcat4.dat' wurde nach 'C:\Programme\Avira\AntiVir Desktop\webcat4.dat' kopiert.
08:24:58 [UPD] [INFO]       'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\.\n_vdf\aevdf.dat' wurde nach 'C:\Programme\Avira\AntiVir Desktop\aevdf.dat' kopiert.
08:25:23 [UPD] [INFO]       'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\.\ave2\win32\int\aecore.dll' wurde nach 'C:\Programme\Avira\AntiVir Desktop\aecore.dll' kopiert.
08:25:25 [UPD] [INFO]       'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\.\ave2\win32\int\aehelp.dll' wurde nach 'C:\Programme\Avira\AntiVir Desktop\aehelp.dll' kopiert.
08:25:51 [UPD] [INFO]       'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\.\ave2\win32\int\aepack.dll' wurde nach 'C:\Programme\Avira\AntiVir Desktop\aepack.dll' kopiert.
08:26:15 [UPD] [INFO]       'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\.\ave2\win32\int\aeset.dat' wurde nach 'C:\Programme\Avira\AntiVir Desktop\aeset.dat' kopiert.
In der Datei ist das Wort  0 mal enthalten
2
C:\Logs\Upd-2011-07-25-07-43-30.log
Vollständiges Produktupdate
Erstellungszeitpunkt: Mon Jul 25 07:43:31 2011

Windows XP (Service Pack 3)  [5.1.2600] 32 bit
Produktinformationen:
Updater: C:\Programme\Avira\AntiVir Desktop\update.exe 10.0.0.39
Bibliothek: C:\Programme\Avira\AntiVir Desktop\update.dll 0.1.0.44

Backupverzeichnis: C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\BACKUP\
Updaterverzeichnis: C:\Programme\Avira\AntiVir Desktop\

Verwende Systemeinstellungen
07:43:34 [UPD] [INFO]       Prüfe ob neuere Dateien zur Verfügung stehen.
07:43:34 [UPD] [INFO]       Herunterladen von 'http://62.146.87.172/update/idx/master.idx' nach 'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\idx\master.idx'.
07:43:58 [UPD] [INFO]       Wähle Updateserver 'http://80.190.130.226/update'.
07:44:18 [UPDLIB] [ERROR]   Downloadmanager: Die Funktion WinINet::HttpSendRequest() 'http://80.190.130.226/update/idx/master.idx' ist fehlgeschlagen. Fehler: A connection with the server could not be established
07:44:18 [UPD] [INFO]       Herunterladen von 'http://80.190.130.227/update/idx/master.idx' nach 'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\idx\master.idx'.
07:44:39 [UPD] [INFO]       Wähle Updateserver 'http://62.146.87.171/update'.
07:44:59 [UPDLIB] [ERROR]   Downloadmanager: Die Funktion WinINet::HttpSendRequest() 'http://62.146.87.171/update/idx/master.idx' ist fehlgeschlagen. Fehler: A connection with the server could not be established
07:44:59 [UPD] [INFO]       Herunterladen von 'http://89.105.213.21/update/idx/master.idx' nach 'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Avira\AntiVir Desktop\TEMP\UPDATE\idx\master.idx'.
07:45:20 [UPD] [INFO]       Wähle Updateserver 'http://89.105.213.22/update'.
07:45:41 [UPDLIB] [ERROR]   Downloadmanager: Die Funktion WinINet::HttpSendRequest() 'http://89.105.213.22/update/idx/master.idx' ist fehlgeschlagen. Fehler: A connection with the server could not be established
07:45:41 [UPD] [ERROR]      Erzeugen der Updatestruktur ist fehlgeschlagen. Die UpdateLib liefert den Fehler 537.

****************
	0 Dateien installiert
	Mon Jul 25 07:45:41 2011
[B]null[/B]
In der Datei ist das Wort  1 mal enthalten
 
Zurück
Oben