Textdatei auslesen, die gerade benutzt wird

jackjava

Neues Mitglied
Hallo!

Folgendes Problem: Ich möchte eine Logfile auslesen, die von einer 3rd-Party-Anwendung geschrieben wird. Sobald man die Anwendung startet, wird eine neue Logfile erstellt und diese bleibt solang geöffnet bis die Anwendung beendet wird. Während dieser Zeit ist es nicht möglich die Logfile mit Notepad zu öffnen. FileInputStream und RandomAccessFile führen direkt zu Exceptions mit der Begleitinformation, dass die Datei bereits von einem anderen Prozess verwendet wird. Nachdem was ich bei meinen Recherchen gelesen habe, ist die Datei vermutlich von dem Prozess gelockt, oder? (Ich habe mit Unlocker getestet und die entsprechende Logdatei wird angezeigt, jedoch war es mir nicht möglich sie zu unlocken.)

Nun ist meine Frage, ob es irgendeinen Weg in Java gibt die Datei auszulesen (oder zu kopieren und dann auszulesen)? Mein Ziel ist es die Datei in bestimmten Intervallen zu parsen und Informationen zu sammeln. Jedoch scheitere ich schon komplett an dem Zugriff auf die Datei. Ich habe keinen SourceCode von der 3rd-Party-Anwendung. Es handelt sich um eine Windows-Anwendung.

Vielen Dank schonmal für die Mühe!
Gruß

JJ
 
Zuletzt bearbeitet:
Hm, du musst ja nicht den Sourcecode haben, aber vielleicht gibts ne API für diese Anwendung?
 
Leider kann ich dir bei deinem Problem auf Anhieb nicht helfen. Ich habe mich vor kurzem selbst maßlos über FileLocks geärgert und musste leider akzeptieren, dass das Betriebssystem immer das letzte Wort hat.

Schon immer fällt es mir schwer zu verstehen, dass eine Datei für Lesezugriffe gesperrt sein kann, wenn ein anderes Programm darauf schreibend zugreift. Dass man gleichzeitige Schreibzugriffe verhindern muss, das ist logisch. Aber eine Datei muss doch für mich immer lesbar sein (natürlich sofern die Benutzerrechte passen).
 
Greifen Unlocker nicht nur bei Dateien, bei denen die Anwendung die sie verwenden abgestürzt ist, bevor sie diese Datei geschlossen haben? Das Lock bleibt dann erhalten und das BS hat noch den Daumen drauf. Bei Dateien laufender Anwendungen funktioniert das afaik gar nicht.
[EDIT]Soweit ich weis, gibt es kein einziges DOS (Disk Operating System) bei dem man ein und dieselbe Datei mehrfach öffnen kann. Sogar die 1541 (C64) seinerzeit mochte das nicht.[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:
Das Thema hatten wir doch erst vorgestern ... nutzt doch bitte mal GooGLe und SuFu ...

Vielleicht sollte man sich erstmal fragen : WARUM ÜBERHAUPT ? muss man das Log-File während der Runtime der App lesen ? Das ergibt in den wenigstens Fällen überhaupt einen Sinn, und da wo es Sinn macht gibt es meist APIs um direkt an die Daten zu kommen (meistens Pipes).
 
Moin,

Sobald man die Anwendung startet, wird eine neue Logfile erstellt und diese bleibt solang geöffnet bis die Anwendung beendet wird. Während dieser Zeit ist es nicht möglich die Logfile mit Notepad zu öffnen.
Wenn ich Dich richtig verstehe, ist das doch das normale Verhalten des OS.
Wenn Dein LogFile von Deiner Applikation geöffnet bleibt, kommen andere Programme da halt nicht dran !

Warum muss sie denn die ganze Zeit offen bleiben ?

Gruß
Klaus
 
Der Punkt ist folgender: die 3rd-Party-Anwendung ist ein Spiel, und wenn man es startet, dann wird eine Logfile erstellt, die permament gelockt ist bis man das Spiel beendet, warum, das weiss ich nicht. API gibt es definitiv nicht. Was ich machen möchte: eine Anwendung schreiben, die erkennt, wenn ich ein Multiplayermatch joine um dann die Namen meiner Mitspieler auszulesen und danach eine Abfrage an eine öffentliche Datenbank zu stellen über ihre Spielstatistiken.
Das Auslesen dieser Logfile hätte mir genau die Informationen geliefert (den Teil mit der Abfrage der DB habe ich bereits). Jedoch bringt es mir nichts mehr die Logfile dann auszulesen, wenn das Spiel beendet ist, weil dann brauch ich die Statistiken meiner Mitspieler auch nicht mehr.
Ich weiss, dass in diesem Fall das Auslesen einer Logfile keine elegante oder effiziente Methode ist um das Problem zu lösen, aber ich bin zu dem auch nicht so extrem fit im Programmieren.
Falls jemand andere Lösungsvorschläge hat, dann wäre ich dankbar.

Gruß und danke!
 
Moin,

ob es dafür bessere Wege gibt, kan nicht Dir so nicht sagen!

Idee: Du könntest mal versuchen, vom Logfile eine Kopie mit anderem Namen zu speichern und diese dann auszulesen. Ich weiß, dass das auf Systemebeme geht ...

Gruß
Klaus
 
Der Punkt ist folgender: die 3rd-Party-Anwendung ist ein Spiel, und wenn man es startet, dann wird eine Logfile erstellt, die permament gelockt ist bis man das Spiel beendet, warum, das weiss ich nicht. API gibt es definitiv nicht. Was ich machen möchte: eine Anwendung schreiben, die erkennt, wenn ich ein Multiplayermatch joine um dann die Namen meiner Mitspieler auszulesen und danach eine Abfrage an eine öffentliche Datenbank zu stellen über ihre Spielstatistiken.
Das Auslesen dieser Logfile hätte mir genau die Informationen geliefert (den Teil mit der Abfrage der DB habe ich bereits). Jedoch bringt es mir nichts mehr die Logfile dann auszulesen, wenn das Spiel beendet ist, weil dann brauch ich die Statistiken meiner Mitspieler auch nicht mehr.
Ich weiss, dass in diesem Fall das Auslesen einer Logfile keine elegante oder effiziente Methode ist um das Problem zu lösen, aber ich bin zu dem auch nicht so extrem fit im Programmieren.
Falls jemand andere Lösungsvorschläge hat, dann wäre ich dankbar.

Gruß und danke!

Also für sowas ist Java eine der wohl schlechtesten Sprachen die man dafür wählen könnte (ich glaube noch stumpfer wäre nur noch PHP).
Du könntest mit JNI/JNA einen Hook für das Game schreiben, hat aber extrem viel mit reverse-engineering zu tun und ist in den meisten Fällen den Aufwand auch nicht wert. Außerdem müsstest du das Ganze dann eh in C/C++ schreiben ... dann brauchst du eh kein Java mehr wenns nur um das callen der Methoden geht. Da wäre es sinnvoller gleich alles in C/C++ zu schreiben. (Es dürften sich dafür auch andere Sprachen eignen, aber Java ist hier definitiv die falsche Wahl.)

Mal davon abgesehen kann ich mir nur schwer vorstellen das du wenn du dich in das Multiplayer-Game inklinkst nicht die Zeit hast nebenbei mal eben schnell selbst die paar Playernamen rauszuschreiben und meinetwegen über ein Frontend die Datenbank abzufragen. Ich denke das hier ein "Programm" was das mal eben machen soll ziemlicher overkill ist. Weil : selbst wenn du es schaffen solltest : wie stellst du die Daten sinnvoll dar ? Sicher in einer Art und Weise die für dich wertvolle Informationen enthält, aber nur weil das mal eben in ein paar Sekunden gehen würde anstatt selbst die Playernamen in der Datenbank zu hinterfragen was etwas länger dauert .... hmm ... ich denke alleine die Idee ist schon ziemlich Banane.
 

Zurück
Oben