bz2-Datei parsen

Status
Nicht offen für weitere Antworten.

littlescrat

Mitglied
Hi Leute,

meine Studienkollegin und ich haben hier ein "kleines" Problem.

Erst mal zu uns: Wir sind zwei Studenten aus Zweibrücken und haben
eine schwieriges Projekt aufgebrummt bekommen, da wo wir nicht mal
richtig Java programmieren können.
Um so dringender dieser Hilferuf :oops:

Es ist so, dass wir ein 28,5 GB großes XML-File im bz2-Format haben (gepackt)
und mit einem SAX-Parser lesen wollen.

Geht das überhaupt?
Kann Java ein bz2-Format lesen? und das in der Größenordnung? :bahnhof:
:shock:

Bisher haben wir es nur geschafft, ein reines XML-File einzulesen.
Wollen wir das gesamte entpackte XML-File auslesen, haben
wir es mit rund 512 GB zu tun :autsch: :autsch: :autsch: :autsch:
Darum kam der Rat vom Professor selbst:
Lieber das gepackte bz2-Format auslesen.

Aber geht das denn überhaupt?
Ich hoffe, ihr könnt uns helfen :(

Lieben Gruß,

Littlescrat &
Team "Projekt VisuWi"
 

Wildcard

Top Contributor
512GB XML? Wer hat denn das verbrochen? :shock:
Mir ist dafür keine Lib bekannt und wenn google nichts ausspuckt sieht's schlecht aus.
 

Hilefoks

Bekanntes Mitglied
Interessante Aufgabe und auf jeden Fall lösbar... allerdings nicht gerade eine leichte Aufgabe. ;-)

Wildcard hat gesagt.:
Mir ist dafür keine Lib bekannt und wenn google nichts ausspuckt sieht's schlecht aus.
Na, na - nur weil google eine solche Lib nicht ausspuckt ist doch nicht gleich das Kind in den Brunnen gefallen. ;-)

Ihr braucht zunächst einmal eine bz2-Bibliothek die euch die Daten linear blockweise entpacken kann. Mir ist keine solche Bibliothek bekannt, allerdings habe ich eine solche auch noch nie gesucht/gebraucht. Da das bz2-Format aber ein offenes Format ist für das es auch einige Java-Implementierungen gibt, gibt es zumindest einen guten Startpunkt zur eigenen Implementierung (z.B. die von Ant). Ich hoffe ihr versteht in welche Richtung es geht....

MfG,
Hilefoks
 
G

Guest

Gast
Hi :wink:

Vielen Dank bisher für eure Ratschläge.
Haben uns angesehen, wie ein GZIPInputStream aufgebaut ist.
Allerdings fragen wir uns, wie wir diesen in unseren SAXParser einbauen könnten.

Und dieser liest in der Tat bz2-Formate? :D

Ich gebe mal den Quellcode, der uns bisher das gesamte File eingelesen hat und was ausgab:
(obwohl wir nur Attribute wie Contributor, Title, Timestamp usw. aus dem XML brauchen)

Code:
import java.io.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;

public class Parser extends DefaultHandler {
	public static void main(String args[]) {
		if (args.length != 1) {
			//System.out.println(args.length);
			System.err.println("Usage: beispiel.xml");
			// System.exit(1);
		}

		// an instance of ourselves as the SAX event handler
		DefaultHandler handler = new Parser();
		// default (non-validating) parser
		SAXParserFactory factory = SAXParserFactory.newInstance();
		try {
			// Set up output stream
			out = new OutputStreamWriter(System.out, "UTF8");

			// Parse the input
			SAXParser saxParser = factory.newSAXParser();
			saxParser.parse(new File("beispiel.xml"),
					handler);

		} catch (Throwable t) {
			t.printStackTrace();
		}
		// System.exit(0);
	}

	static private Writer out;
	
	// ===========================================================
	// SAX DocumentHandler methods
	// ===========================================================

	public void startDocument() throws SAXException {
		nl();
		nl();
		emit("START DOCUMENT");
		nl();
		emit("<?xml version='1.0' encoding='UTF-8'?>");
	}

	public void endDocument() throws SAXException {
		nl();
		emit("END DOCUMENT");
		try {
			nl();
			out.flush();
		} catch (IOException e) {
			throw new SAXException("I/O error", e);
		}
	}

	public void startElement(String namespaceURI, String lName, // local name
			String qName, // qualified name
			Attributes attrs) throws SAXException {
		nl();
		emit("ELEMENT: ");
		String eName = lName; // element name
		if ("".equals(eName))
			eName = qName; // namespaceAware = false
		emit("<" + eName);
		if (attrs != null) {
			for (int i = 0; i < attrs.getLength(); i++) {
				String aName = attrs.getLocalName(i); // Attr name
				if ("".equals(aName))
					aName = attrs.getQName(i);
				nl();
				emit("   ATTR: ");
				emit(aName);
				emit("\t\"");
				emit(attrs.getValue(i));
				emit("\"");
			}
		}
		if (attrs.getLength() > 0)
			nl();
		emit(">");
	}

	public void endElement(String namespaceURI, String sName, // simple name
			String qName // qualified name
	) throws SAXException {
		nl();
		emit("END_ELM: ");
		emit("</" + sName + ">");
	}

	public void characters(char buf[], int offset, int len) throws SAXException {
		nl();
		emit("CHARS: |");
		String s = new String(buf, offset, len);
		emit(s);
		emit("|");
	}

	// ===========================================================
	// Utility Methods ...
	// ===========================================================

	// Wrap I/O exceptions in SAX exceptions, to
	// suit handler signature requirements
	private void emit(String s) throws SAXException {
		try {
			out.write(s);
			out.flush();
		} catch (IOException e) {
			throw new SAXException("I/O error", e);
		}
	}

	// Start a new line
	private void nl() throws SAXException {
		String lineEnd = System.getProperty("line.separator");
		try {
			out.write(lineEnd);
		} catch (IOException e) {
			throw new SAXException("I/O error", e);
		}
	}
}

Könnt ihr damit was anfangen? :)

Liebe Grüße,

LittleScrat &
Team "Projekt VisuWi"
 

littlescrat

Mitglied
Ops... wir sind leider neu hier.
Hatten vergessen uns einzuloggen :roll:

Nicht wundern... dieser "Gast" da oben sind wir -> littlescrat :oops:
 

Ullenboom

Bekanntes Mitglied
Das sollte kein Problem sein. Zunächst liefert org.apache.commons.compress.compressors.bzip2.BZip2InputStream aus dem Apache Commons Compress (http://jakarta.apache.org/commons/sandbox/compress/) einen InputStream. Diesen übergibt man dann SAX, oder besser noch StAX:

InputStream fis = new FileInputStream( file );
InputStream bz2is = new BZip2InputStream( fis );

XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader parser = factory.createXMLStreamReader( bz2is );

Dann geht's an die Elemente. Mehr zu StAX unter http://www.tutego.com/javabuch/javainsel6/javainsel_13_004.htm#Xxx999685.
 

littlescrat

Mitglied
Hi :wink:

Das ist ja prima!
Wir werden uns diesen Code anschauen und zusehen, dass das Ding läuft.
Allerdings werden wir das dann erst mit kleineren bz2-Dateien ausprobieren :###

Herzlichen Dank noch mal an alle.
Werde dann den Fortschritt bzw. den neuen Code posten, wenn wir alles soweit haben
oder wieder ein Problem auftaucht. :(

Eine kleine Frage bleibt im Moment noch:
Wo muss man im Parser eintragen, dass nur die Attribute ausgelesen werden, die man braucht?
Zum Beispiel <contributor> oder <title> usw?

Hier wäre ein kleiner Ausschnit aus dem XML-File:

Code:
<title>Thema XML</title> 
  <id>1</id> 
- <revision>
  <id>1</id> 
  <timestamp>2007-03-30T11:37:26Z</timestamp> 
- <contributor>
  <ip>bln2-t3-2.xxxxxx.net</ip> 
  </contributor>

Lieben Gruß,

LittleScrat &
Team "Projekt VisuWi"
 

littlescrat

Mitglied
Hallo alle zusammen, :wink:

wir haben nun wild an dem "StAX-Parser" rumprobiert.
Leider gibt es da ein Problem.
Hier der Quellcode dazu:



Code:
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.compress.bzip2.CBZip2InputStream;

public class StaxParser {

	public static void main(String[] args) throws Exception {
		InputStream fis = new FileInputStream("beispiel.xml.bz2");
		InputStream bz2is = new BZip2InputStream(fis);
		XMLInputFactory factory = XMLInputFactory.newInstance(); 
		XMLStreamReader xmlStreamReader = factory.createXMLStreamReader( bz2is ); 
		
		/*XMLStreamReader xmlStreamReader = XMLInputFactory.newInstance()
				.createXMLStreamReader(
						new FileInputStream(
								"beispiel.xml"));
								*/
		while (xmlStreamReader.hasNext()) {
			switch (xmlStreamReader.next()) {
			case XMLStreamConstants.START_ELEMENT:
				handleStartElement(xmlStreamReader);
				break;
			case XMLStreamConstants.END_ELEMENT:
				handleEndElement(xmlStreamReader);
				break;
			case XMLStreamConstants.CHARACTERS:
				handleCharacters(xmlStreamReader);
				break;
			default:
			}
		}
		xmlStreamReader.close();
	}

	private static void handleCharacters(XMLStreamReader xmlStreamReader) {
		System.out.print(xmlStreamReader.getText().trim());
	}

	private static void handleEndElement(XMLStreamReader xmlStreamReader) {
		System.out.print("</" + xmlStreamReader.getName() + ">");
	}

	private static void handleStartElement(XMLStreamReader xmlStreamReader) {
		System.out.print("<" + xmlStreamReader.getName());
		int cnt = xmlStreamReader.getAttributeCount();
		for (int i = 0; i < cnt; i++) {
			System.out.print(xmlStreamReader.getAttributeName(i) + "=\""
					+ xmlStreamReader.getAttributeValue(i) + "\"");
			if (i + 1 < cnt) {
				System.out.print(" ");
			}
		}
		System.out.print(">");
	}
}

Bei dieser Zeile:
Code:
import org.apache.commons.compress.bzip2.CBZip2InputStream;
Muss der Rechner dazu online sein? Dieser Import funktioniert nicht.
Muss man da noch ein jar-File runterladen?
Code:
InputStream bz2is = new BZip2InputStream(fis);
Deswegen haben wir hier auch einen Fehler. Das Programm erkennt den CBZip2Inputstream nicht :(

Könnt ihr uns bitte helfen?

Liebe Grüße,

Littlescrat &
Team "Projekt VisuWi"
 

littlescrat

Mitglied
Hi :wink:

wir wussten nicht, dass wir ein Package runterladen mussten.
Jetzt wissen wir Bescheid. Herzlichen Dank.
Werden den Parser noch mal so neu testen, wenn wir das Package runtergeladen haben :###

Liebe Grüße,

Littlescrat &
Team "Projekt VisuWi"
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
MiMa Buch Metadaten aus XML Datei parsen XML & JSON 48
K Beim Parsen einer XML-Datei Connection timed out XML & JSON 4
M XML Datei Parsen XML & JSON 4
K Kurze XML Datei Parsen XML & JSON 5
L [SAX] Geschachtelte XML Datei parsen XML & JSON 3
L Reihenfolge beim xml Datei parsen einhalten? XML & JSON 8
L xml Datei parsen ohne End-Tag XML & JSON 6
M Datei parsen XML & JSON 5
Saxony unbekannte XML Datei parsen und ausgeben XML & JSON 10
D XML Datei innerhalb einer JAR Datei parsen XML & JSON 2
byte Probleme beim Parsen von XHTML-Datei XML & JSON 4
S XML Datei mit Schemafehler parsen XML & JSON 14
K XML Datei parsen XML & JSON 4
T Tags in XML Datei mit Java erstellen XML & JSON 3
S XML Datei speichern nicht möglich XML & JSON 13
M Objekt zu jsonArray in .json datei hinzufügen ? XML & JSON 3
J Object in JSON Datei einlesen und als neues Object erzeugen (in ein Object Array) XML & JSON 29
I Mit Hibernate eine XML-Datei in eine Tabellenspalte einlesen. XML & JSON 1
J Auslesen der Länge einer XML-Datei in Android Studio XML & JSON 8
R xlsx-Datei mit Apache POI einlesen XML & JSON 18
S Validierung einer XML-Datei - Führende Leerzeichen und Tabs XML & JSON 10
S CSV Datei einlesen und XML Ausgeben XML & JSON 2
U jar Datei mit ant erstellen XML & JSON 1
P wie kriege ich eine *.dtd Datei mit in die ausführbare *.jar? XML & JSON 2
K XML Datei erstellen und Daten daraus in Java auslesen XML & JSON 6
D XML-Datei per Button erstellen XML & JSON 3
K JAR-File mit XML-Datei XML & JSON 1
M Text eines Elements in XML Datei mit JAVA bearbeiten und kompletten Element-Zweig hinzufügen XML & JSON 16
I Liste in YAML Datei speichern und wieder auslesen XML & JSON 1
A Leeres Array beim Auslesen von XML-Datei XML & JSON 4
E JTreedaten in eine XML Datei speichern XML & JSON 3
D Int-Werte in XML-Datei schreiben (DOM) XML & JSON 2
B xsd-Datei ins jar file XML & JSON 5
T Formulardaten in XML Datei speichern XML & JSON 5
H Wsdl datei XML & JSON 2
D Große XML-Datei in einzel Dateien splitten XML & JSON 3
S Neue Inhalte in XML-Datei einfügen XML & JSON 0
S JDOM XML Datei darstellen Fehler! XML & JSON 2
S Xml File für den Aufbau einer anderen Xml Datei XML & JSON 6
M XML-Datei mit JAXB und 2 Namespaces XML & JSON 0
J XML - Datei wird nicht ganz angezeigt XML & JSON 2
P (Eclipse)Ant Script, .jar Datei erstellen mit MANIFEST.MF XML & JSON 12
Z XML Datei mit JDOM einlesen und verarbeiten XML & JSON 6
E ResultSet als XML Datei speichern XML & JSON 7
M XStream, CSV Datei XML & JSON 9
A Frage zu bestehender XML Datei XML & JSON 6
A Simple Constructor Injection Datei-Pfad XML & JSON 6
K Einlesen eines Parameters aus HTML-Datei XML & JSON 4
Maxim6394 Lesen/Schreiben von XML Datei XML & JSON 9
A XML datei lesbar speichern (eingerückt) XML & JSON 7
Airwolf89 HTML Datei mit SAXBuilder laden hängt sich auf XML & JSON 4
N Java Code aus XML Datei generieren XML & JSON 8
D Aus lesen einer XML-Datei ( 1 root, 3 childs) XML & JSON 7
D Wie XML Datei einlesen und HTML entities übernehmen? XML & JSON 3
R XLM Datei lesen Ändern (kompliziertes Search and Replace) und Speichern XML & JSON 12
S XSD-Datei zulässige Werte auslesen XML & JSON 3
M XML Datei heapspace erreicht XML & JSON 3
M Große Datei auslesen/in dieser suchen XML & JSON 2
S Konforme XML Datei über XSD erstellen XML & JSON 2
M RSS-Datei auslesen von Yahoo Webservice XML & JSON 4
T Inhalt einer .xml Datei auf Javaoberfläche wiedergeben XML & JSON 4
M XML Datei drucken XML & JSON 8
T Daten aus Programm in XML Datei speichern XML & JSON 2
D XSD Datei erstellen XML & JSON 4
E XML Datei mit DOM auslesen (Text mit Attributen) XML & JSON 2
G txt. Datei in xml datei konvertieren XML & JSON 21
K XML Datei in ein Java package „einbinden" XML & JSON 3
C if-Abfrage mit Datei Variable aus XML-Datei XML & JSON 2
sylo Beim Erzeugen einer XML Datei auch die XML Struktur erzeugen? XML & JSON 11
sylo DOM Document in XML Datei schreiben XML & JSON 5
F XML Datei in Java einlesen XML & JSON 4
J Objektstruktur aus XML-Datei erzeugen XML & JSON 21
D ID's aus XML Datei rauslesen und in Java ausgeben XML & JSON 7
E XML Datei einlesen und Elemente in der Console ausgeben XML & JSON 6
N value Wert einer XML Datei mit JAVA bearbeiten XML & JSON 21
ARadauer Aus XML Datei Objekte erstellen... XML & JSON 3
N MalformedByteSequenceException bei Lesen aus XML Datei XML & JSON 2
H xml-Datei mit Attributen einlesen XML & JSON 3
A XML-Datei: Ab wann kritische Größe erreicht? XML & JSON 4
multiholle XML Datei elegant verarbeiten XML & JSON 14
M XMI-Datei auslesen XML & JSON 4
T Ließt keine XML Datei XML & JSON 2
R JAXB: Aus einem Vector oder List XML Datei erstellen XML & JSON 1
J XML-Datei ein Array einlesen XML & JSON 10
M xml - datei erstellen XML & JSON 2
T Wie einen String(XML Inhalt) in eine XML Datei speichern? XML & JSON 8
P Große XML Datei mittels JDOM bearbeiten / einlesen XML & JSON 6
H XML-Datei in einzelne XML-Dateien zerlegen XML & JSON 2
G Tags oder Zeilen der Not-Validen XML-Datei XML & JSON 7
C Suche in XML-Datei XML & JSON 6
D Zeilennummer in der XML - Datei XML & JSON 5
S Einlesen einer xml Datei XML & JSON 4
S PDF Erzeugung - Probleme mit der XML Datei bei Schema-Infos XML & JSON 2
S XML Datei einlesen, aber root überspringen XML & JSON 2
T Werte in XML Datei an entsprechender Stelle einfügen XML & JSON 3
L XML Datei in Java angeben Pfad? XML & JSON 3
A Mehrere Anwender sollen auf eine XML-Datei zugreifen XML & JSON 4
A SVG Datei auslesen und Batik XML & JSON 1
N neue XML-Datei erstellen mit vorhandener Struktur XML & JSON 18
M brauche große XML-Datei für XPath-Tests XML & JSON 4

Ähnliche Java Themen

Neue Themen


Oben