*.log File durchsuchen

Status
Nicht offen für weitere Antworten.

Peterle

Mitglied
Hallo Leute

Wie kann ich ein *.log File öffnen und dieses nach einem bestimmten String durchsuchen!

ich versuchte es mit einem Filereader aber ich bekam immer folgende Fehlermeldung:

" (Die Syntax fⁿr den Dateinamen, Verzeichnisnamen oder die DatentrΣgerbezeichnun
g ist falsch)"


kann mir bitte jemand ein Beispiel aufzeigen mit dem das klappt?



Danke euch schon mal vorab!
 
Code:
BufferedReader in  = new BufferedReader(new FileReader("meineDatei")); // <- Streams zum lesen wird geöffnet
String line; // <- wird die einzelnen Zeilen speichern
String suchString = "hallo"; // <- String den du suchst


while((line = in.readLine() != null) { // <- es wird solange zeilenweise eingelesen bis nix mehr da ist
  if(line.indexOf(suchString) != -1) { // <- suchString wurde gefunden
    // mach irgendwas mit line oder so
  }
}

in.close();

Wäre ein Bsp 😀 achja, das ganze kann eine IOException werfen !
 
Sorry aber deathbyaclown das funktioniert nicht!

bekomme wieder die Fehlermeldung!

" (Die Syntax fⁿr den Dateinamen, Verzeichnisnamen oder die DatentrΣgerbezeichnung ist falsch)"

kann mir sonst noch jemand helfen?

hänge jetzt schon 5 stunden mit dem Problem herum!

finde auch nirgendwo etwas, wie man explizit "*.log"-files lesen kann!
 
Peterle hat gesagt.:
ich versuchte es mit einem Filereader aber ich bekam immer folgende Fehlermeldung:

" (Die Syntax fⁿr den Dateinamen, Verzeichnisnamen oder die DatentrΣgerbezeichnun
g ist falsch)"

Und welches Prog gibt Dir so eine Fehlermeldung aus? Nach ner Exception sieht das nicht aus. Beschreib am besten Deine ganze Umgebung und poste den relevanten Code. Dann kann man Dir auch helfen!

Grüße,
Mick
 
Hast du das file vielleicht in einer *.jar-Datei. Zum Testen kannst du die Datei (die Logdatei) ja erstmal auf c:/ oder ~/ legen, damit du ausschließen kannst, dass die Pfadangabe falsch ist.
 
Sorry - das kann keine Exception von Java sein - jedenfalls schmeißt mein Java keine Deutschen Exceptions.....
 
Umgebung:
Betriebssystem: Win XP
Arbeite mit Jbuilder 9
starte das Programm mit Cmd prompt

Programm
das Programm soll alle log files in einem angegebenen Ordner und unterordner raussuchen und diese nach einem bestimmten vorgegebenen String durchsuchen!
wird der string gefunden soll der Dateiname ausgeben werden!

die log dateien liegen in einem lokalen Verzeichnis (nicht gepackt!!)


Code:
import java.io.*;

public class searchString {

  public static void searchFile(String file, String zeichen){
    try{
      //soll datei öffenen und nach Zeichen durchsuchen!
      BufferedReader in  = new BufferedReader(new FileReader(new File(file)));// <- Streams zum lesen wird geöffnet
      String line; // <- wird die einzelnen Zeilen speichern
      while((line = in.readLine()) != null) { // <- es wird solange zeilenweise eingelesen bis nix mehr da ist
        if(line.indexOf(zeichen) != -1) { // <- suchString wurde gefunden
          // mach irgendwas mit line oder so
          outputFounded(file);
        }
      }

      in.close();
    }
    catch (IOException e){
      System.out.println(e.getMessage());
    }
  }

  private static void outputFounded(String file){
    //gibt die Datei aus, wenn sie das/die Zeichen enthält
    System.out.println(file);
  }

Code:
import java.io.*;

//diese Klasse gibt mir alle gültigen Files einer Klasse wieder!
//wenn es noch unterordner gibt, dann soll ein neuer thread erzeugt werden, der das abarbeitet
public class getValidFiles {

  public void listAllFiles(String folder, String zeichen, String typ){
    String str = "";
    File file = new File(folder);
    //VerzeichnisListe
    if(file.isFile()){

    }
    else{
      String[] fileList = file.list();
      int length = fileList.length;
      int fileOK = 0;
      //Thread instanzierung
      threadedGetValidFiles tgvf;
      threadedSearchString tss;
      //schleifensteuerung aller gefundenen Files
      for(int i = 0; i < length; i++){
        fileOK = listElementCheck((folder+"\\"+fileList[i]), typ);
        //prüfe es sich um ein Verzeichnis oder eine gültiges File handelt!
        if(fileOK == 2 ){
          tss = new threadedSearchString();
          tss.startThread(folder+"\\"+fileList[i]+"\n", zeichen);
        }
        //durchsuche die unterordner indem du einen neuen Thread startest!
        if( fileOK == 1){
          tgvf = new threadedGetValidFiles();
          tgvf.startThread(folder+"\\"+fileList[i], zeichen, typ);
        }
      }
    }
  }

  public static int listElementCheck(String elementName, String fileType){
    //prüft nach ob es sich um ein File oder ein Directory handelt!
    //0.. kein typ, 1.. Folder, 2.. File des typs
    int type = 0;
    File file = new File(elementName);

    if(file.isDirectory()){
      type = 1;
    }
    else if(file.isFile() && file.getName().endsWith(fileType)){
       type = 2;
    }
    return type;
  }

}

Eingabe class

Code:
import java.io.*;

class search {
  //Eingabe-Variablen definieren
  static String folder, zeichen, eMail;
  static String typ = ".log";

  public static void main(String[] args) throws IOException {
    //start der eingabe
    inputForm();
    //suche aller gültigen Files
    returnAllValidFiles();
  }

  public static void inputForm()
      throws IOException{
    //InputReader definieren
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    //EingabeText
    System.out.println( "=====================================================\n" +
        "Willkommen bei der String-Suche in einem Verzeichnis\n" +
        "=====================================================\n" +
        "Bitte geben Sie exakt die Zeichenkette an, nach der\n" +
        "die '*.log' Files durchsucht werden sollen.\n" +
        "Das Verzeichnis hat das Format: c:\\folder\\folder\\..\n" +
        "Die eMail muss ein gültiges Format haben:\n" +
        "\tz.B.:\t'vorname.name@siemens.de'\n" +
        "=====================================================\n" +
        "\n\nBitte geben Sie das Verzeichnis an: ");
    folder = br.readLine();
    System.out.println("\nBitte geben Sie die Zeichenkette an:  ");
    zeichen = br.readLine();
    System.out.println("\nBitte geben Sie die Email an:  ");
    eMail = br.readLine();
    System.out.println(
        "*****************************************************\n" +
        "Danke fuer ihre Eingabe, das Ergebnis wird an diese \n" +
        "eMail uebermittelt, wenn etwas gefunden wurde!\n" +
        "*****************************************************\n" +
        "\tCopyright Peter Suess, 2004\n\n\n");
  }
  public static void returnAllValidFiles(){
    System.out.println("\n*************************************\n" +
    "************** AUSGABE **************\n");
    File f = new File(folder);
    threadedGetValidFiles tvgf;
    //wenn Verzeichnis existiert dann mache weiter, sonst ende
    if (f.isDirectory() || (f.isFile() && f.getName().endsWith(".log"))) {
    //threads starten!
      tvgf = new threadedGetValidFiles();
      tvgf.startThread(folder, zeichen, typ);
    }
    else {
      System.out.println(
          "Sie haben einen ungueltigen Verzeichnis- bzw. Filenamen angegeben\n" +
          "\tVerzeichnis bzw. File: " + folder + "\n" +
          "*************************************");
    }

  }

}

und der pfad den ich eingebe lautet c:\test\log
dort liegen die log files mit dem namen (access.log und jvm.log)

und das ist die meldung die mir ausgegeben wurde! (im cmd)
*************************************
************** AUSGABE **************
c:\test\log\access.log
(Die Syntax fⁿr den Dateinamen, Verzeichnisnamen oder die DatentrΣgerbezeichnun
g ist falsch)
c:\test\log\jvm.log
(Die Syntax fⁿr den Dateinamen, Verzeichnisnamen oder die DatentrΣgerbezeichnun
g ist falsch)
 
was ist "threadedGetValidFiles" & "threadedSearchString()" ?

PS: Klassennamen werden in Java immer mit Großbuchstaben begonnen !!
 
Und wo wird diese Fehlermeldung erzeugt? In einer anderen Klasse?

Die Syntax fⁿr den Dateinamen, Verzeichnisnamen oder die DatentrΣgerbezeichnun
g ist falsch
 
was ist "threadedGetValidFiles" & "threadedSearchString()" ?

PS: Klassennamen werden in Java immer mit Großbuchstaben begonnen !!
das sind meine Thread-Klassen um eine schnellere abarbeitung zu bewerkstelligen!
*grossbuschtaben! ok werde es mir merken!

Und wo wird diese Fehlermeldung erzeugt? In einer anderen Klasse?

Die Syntax fⁿr den Dateinamen, Verzeichnisnamen oder die DatentrΣgerbezeichnun
g ist falsch

diese exception wird in der Klasse:
Code:
import java.io.*; 

public class searchString { 

  public static void searchFile(String file, String zeichen){ 
    try{ 
      //soll datei öffenen und nach Zeichen durchsuchen! 
      BufferedReader in  = new BufferedReader(new FileReader(new File(file)));// <- Streams zum lesen wird geöffnet 
      String line; // <- wird die einzelnen Zeilen speichern 
      while((line = in.readLine()) != null) { // <- es wird solange zeilenweise eingelesen bis nix mehr da ist 
        if(line.indexOf(zeichen) != -1) { // <- suchString wurde gefunden 
          // mach irgendwas mit line oder so 
          outputFounded(file); 
        } 
      } 

      in.close(); 
    } 
    catch (IOException e){ 
      System.out.println(e.getMessage()); 
    } 
  } 

  private static void outputFounded(String file){ 
    //gibt die Datei aus, wenn sie das/die Zeichen enthält 
    System.out.println(file); 
  }
erzeugt. innerhalb der try catch schleife!

wo das "Catch" die meldung schmeisst!
 
habe mal genau getestet was alles in der Try schleife ausgeführt wird und ab wann die exception kommt!
Code:
import java.io.*;

public class SearchString {

  public static void searchFile(String file, String zeichen){
    System.out.println("vor try catch");
    try{
      //soll datei öffenen und nach Zeichen durchsuchen!
      System.out.println("BufferedReader");
      BufferedReader in  = new BufferedReader(new FileReader(new File(file)));// <- Streams zum lesen wird geöffnet
      String line; // <- wird die einzelnen Zeilen speichern
      System.out.println("vor der while-schleife");
      while((line = in.readLine()) != null) { // <- es wird solange zeilenweise eingelesen bis nix mehr da ist
        System.out.println("vor if schleife und in while Schleife");
        if(line.indexOf(zeichen) != -1) { // <- suchString wurde gefunden
          System.out.println("innerhalb der if schleife!");
          // mach irgendwas mit line oder so
          outputFounded(file);
          System.out.println("execption is in der Try schleife");
        }
      }

      in.close();
    }
    catch (IOException e){
      System.out.println("Catch: "+e.getMessage());
    }
  }

  private static void outputFounded(String file){
    //gibt die Datei aus, wenn sie das/die Zeichen enthält
    System.out.println(file);
  }

}
und das ist die Fehlermeldung dazu:
vor try catch
BufferedReader
Catch: c:\test\log\access.log
(Die Syntax fⁿr den Dateinamen, Verzeichnisnamen oder die DatentrΣgerbezeichnun
g ist falsch)
vor try catch
BufferedReader
Catch: c:\test\log\jvm.log
(Die Syntax fⁿr den Dateinamen, Verzeichnisnamen oder die DatentrΣgerbezeichnun
g ist falsch)

==> der Buffered Reader erzeugt die exception!
 
Dann gib dir mal den String file aus - da muss dann der Haken sein....
 
try-catch-block <- :!:
if-block :!:
und lass dir dochmal den stacktrace ausgeben...
 
Roar hat gesagt.:
try-catch-block <- :!:
if-block :!:
und lass dir dochmal den stacktrace ausgeben...
vor try catch
BufferedReader
c:\test\log\access.log

Catch: c:\test\log\access.log
(Die Syntax fⁿr den Dateinamen, Verzeichnisnamen oder die DatentrΣgerbezeichnun
g ist falsch)
java.io.FileNotFoundException: c:\test\log\access.log
(Die Syntax fⁿr den Dateinamen, Verzeichnisnamen oder die DatentrΣgerbezeichnun
g ist falsch)
at java.io.FileInputStream.open(Native Method)
vor try catch
BufferedReader
c:\test\log\jvm.log

Catch: c:\test\log\jvm.log
(Die Syntax fⁿr den Dateinamen, Verzeichnisnamen oder die DatentrΣgerbezeichnun
g ist falsch)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileReader.<init>(Unknown Source)
at SearchString.searchFile(SearchString.java:13)
at ThreadedSearchString.run(ThreadedSearchString.java:20)
at java.lang.Thread.run(Unknown Source)
java.io.FileNotFoundException: c:\test\log\jvm.log
(Die Syntax fⁿr den Dateinamen, Verzeichnisnamen oder die DatentrΣgerbezeichnun
g ist falsch)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileReader.<init>(Unknown Source)
at SearchString.searchFile(SearchString.java:13)
at ThreadedSearchString.run(ThreadedSearchString.java:20)
at java.lang.Thread.run(Unknown Source)

hier der Stacktrace
 
Peterle hat gesagt.:
Und wo wird diese Fehlermeldung erzeugt? In einer anderen Klasse?

Die Syntax fⁿr den Dateinamen, Verzeichnisnamen oder die DatentrΣgerbezeichnun
g ist falsch

diese exception wird in der Klasse:
Code:
import java.io.*; 

public class searchString { 

  public static void searchFile(String file, String zeichen){ 
    try{ 
      //soll datei öffenen und nach Zeichen durchsuchen! 
      BufferedReader in  = new BufferedReader(new FileReader(new File(file)));// <- Streams zum lesen wird geöffnet 
      String line; // <- wird die einzelnen Zeilen speichern 
      while((line = in.readLine()) != null) { // <- es wird solange zeilenweise eingelesen bis nix mehr da ist 
        if(line.indexOf(zeichen) != -1) { // <- suchString wurde gefunden 
          // mach irgendwas mit line oder so 
          outputFounded(file); 
        } 
      } 

      in.close(); 
    } 
    catch (IOException e){ 
      System.out.println(e.getMessage()); 
    } 
  } 

  private static void outputFounded(String file){ 
    //gibt die Datei aus, wenn sie das/die Zeichen enthält 
    System.out.println(file); 
  }
erzeugt. innerhalb der try catch schleife!

wo das "Catch" die meldung schmeisst!

Da steht, dass im Exception-Falle folgendes ausgegeben werden soll:
"e.getMessage". Da e eine IOException ist, kommt es mir seeeeehr komisch vor, dass die eine deutsche Fehlerbeschreibung ausgibt. Das muss meiner Meinung nach noch wo anders herkommen. Oder ist die Meldung gar nicht vom Stacktrace?
 
DANKE ALLEN FÜR DIE SUPER HILFE UND MÜHEN! 😀
es lag am String!

der input String war: "c:\test\log"
richtig:
"c:\\test\\log"

blos der Fehler dabei ist, dass im String selber das "\" mit "\\" geschrieben werden muss, sonst gibt es Probleme!

habe das jetzt behoben und werde die String erkennung über die Eingabe verbessern, damit die String-Literale angezeigt werden!

:toll: und danke nochmals!


Grüße an alle und noch schöne Ostern

Peter
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben