ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
576
576
EMPFEHLEN
-
Hi,
ein Log-File-Parser hat je nach dem, ob er ein aktuelles Log oder eins von Vortagen analysieren soll eine .log (plain text) oder eine "gezippte" Variante .log.gz vorliegen.
In beiden Fällen ist es kein Problem, an die eigentliche Datei zu kommen:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// Log-Datei und entsprechenden Reader definieren FileInputStream datei = new FileInputStream(dateiPfad); BufferedReader dateiReader = null; // Gepackter Log-File -> *.log.gz ? if (dateiPfad.contains(".gz")) { // Liegt das Log als .gz vor, muss ein GZIPInputStream darum gelegt werden InputStream entzippteDatei = new GZIPInputStream(datei); dateiReader = new BufferedReader(new InputStreamReader(entzippteDatei, "ISO-8859-15")); } else { // oder normaler Log-File -> *.log ? dateiReader = new BufferedReader(new InputStreamReader(datei, "ISO-8859-15")); }
Da die Log-Files aber durchaus mal etwas größer werden können und für einen Tag bereits ~1 Mio. Zeilen enthalten können, dauert das einlesen schon ein paar Sekunden. Daher wollte ich (mit Bezug auf Dateigröße und bereits eingelesene Bytes eine Fortschrittsanzeige einbauen.
Für die normalen Logs ist das kein Problem. Hier entspricht file.length() ja der Größe der eingelesenen Datei. Bei einer log.gz entspricht es allerdings der Größe der gezippten Datei. Eingelesen wird ja später die entpackte und daher deutlich größere Datei.
Gibt es eine Möglichkeit an die Größe einer in einer Gzip gepackten Datei zu kommen, ohne sie aus dem Inputstream erst wieder in eine Datei schreiben zu lassen (deren Größe ich dann wiederrum bestimme).
Naiv ausgedrückt suche ich sowas wie (mit der imaginären Klasse GZFile):
Code :1 2
GZFile gz = new GZFile(dateiPfad) long size = GZFile.getContent().length();
Beispielhaft ist ein (noch etwas überschaubarerer Log-File 26MB groß. als .gz bringt er es nur noch zu 2,2MB.
P.S.: Klar könnte ich für einige Beispiele mal schauen wie sich der Faktor gepackt zu entpackt verhält und den auf die gz-Datei-Größe aufschlagen. Aber wenns geht hätte ich die Größe gerne tatsächlich bestimmt und nicht geschätzt.
Gruß und Danke vorab
Muhrad
-
Hi Muhrad,
ist vielleicht nicht die tollste Lösung, aber so könnte es gehen:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
public static long getGzipFileSize(String filename) throws IOException { InputStream is = null; long length = 0L; long skipped = 0L; try { is= new GZIPInputStream(new FileInputStream(filename)); do { skipped = is.skip(Long.MAX_VALUE); length += skipped; } while (skipped > 0L); } finally { if(is != null) { is.close(); } } return length; }
Gruß
Jochen
-
Hi,
das ist zumindest schonmal eine Variante die funktioniert. Leider muss ich auch hier die Datei einmal inhaltlich durchlaufen. Bei den zugrundeliegenden Logs muss ich somit alleine auf die Größenberechnung 3-4 Sekunden warten. Mir ist das zu lang...entscheiden tut es aber letztendlich jemand anders
Insofern schonmal Danke dafür. Auf die Idee mit Skip zu arbeiten kam ich nicht (ist gemessen an der Laufzeit ja wesentlich fixer als das wirkliche Verarbeiten der gelesenen Daten).
-
10.03.10 13:20 #4
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
eine möglichkeit wäre es mit einem Konsolen Kommande über ProcessBuilder die Inhalte (+größe) des tar.gz Files auszugeben und diese
Ausgabe zu parsen.
Dateien aus einem tar entpacken kann man übrigens auch mit Ant-Tar:
http://www.koders.com/java/fid5AE405...9BA9C0AC8.aspx
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
geht nur um *.gz (ohne tar).
Konsolenkommandos muesste ich mal checken.
Ähnliche Themen
-
Dateigröße eines IMG ermitteln?
Von FunkyMonkey im Forum Javascript & AjaxAntworten: 5Letzter Beitrag: 18.08.07, 22:28 -
Dateigröße ermitteln?
Von Kriz im Forum VisualStudio & MFCAntworten: 4Letzter Beitrag: 22.05.05, 20:34 -
Dateigröße in KB oder MB ermitteln
Von qsrs im Forum PHPAntworten: 4Letzter Beitrag: 23.01.05, 16:31 -
Dateigröße ermitteln
Von d4kine im Forum Visual Basic 6.0Antworten: 3Letzter Beitrag: 15.11.04, 15:31 -
Dateigröße ermitteln
Von big hero im Forum PHPAntworten: 2Letzter Beitrag: 24.11.02, 15:13





Zitieren

Login





