Galileo Computing :: Java 7 - Mehr als eine Insel - 8 Dateiformate
Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Neues in Java 7
2 Threads und nebenläufige Programmierung
3 Datenstrukturen und Algorithmen
4 Raum und Zeit
5 Dateien, Verzeichnisse und Dateizugriffe
6 Datenströme
7 Die eXtensible Markup Language (XML)
8 Dateiformate
9 Grafische Oberflächen mit Swing
10 Grafikprogrammierung
11 Netzwerkprogrammierung
12 Verteilte Programmierung mit RMI
13 RESTful und SOAP Web-Services
14 JavaServer Pages und Servlets
15 Applets
16 Datenbankmanagement mit JDBC
17 Technologien für die Infrastruktur
18 Reflection und Annotationen
19 Dynamische Übersetzung und Skriptsprachen
20 Logging und Monitoring
21 Java Native Interface (JNI)
22 Sicherheitskonzepte
23 Dienstprogramme für die Java-Umgebung
Stichwort

Download:
- openbook, ca. 21,3 MB
Buch bestellen
Ihre Meinung?

Spacer
Java 7 - Mehr als eine Insel von Christian Ullenboom
Das Handbuch zu den Java SE-Bibliotheken
Buch: Java 7 - Mehr als eine Insel

Java 7 - Mehr als eine Insel
Galileo Computing
1433 S., 2012, geb.
49,90 Euro, ISBN 978-3-8362-1507-7
Pfeil 8 Dateiformate
Pfeil 8.1 Einfache Dateiformate für strukturierte Daten
Pfeil 8.1.1 Property-Dateien
Pfeil 8.1.2 CSV-Dateien
Pfeil 8.1.3 JSON-Serialisierung mit Jackson
Pfeil 8.2 Dokumentenformate
Pfeil 8.2.1 (X)HTML
Pfeil 8.2.2 PDF-Dokumente
Pfeil 8.2.3 Microsoft Office-Dokumente
Pfeil 8.2.4 OASIS Open Document Format
Pfeil 8.3 Datenkompression *
Pfeil 8.3.1 Java-Unterstützung beim Komprimieren
Pfeil 8.3.2 Daten packen und entpacken
Pfeil 8.3.3 Datenströme komprimieren
Pfeil 8.3.4 Zip-Archive
Pfeil 8.3.5 Jar-Archive
Pfeil 8.4 Bild-Formate
Pfeil 8.5 Audio-Dateien
Pfeil 8.5.1 Die Arbeit mit AudioClip
Pfeil 8.5.2 MIDI-Dateien abspielen

Galileo Computing - Zum Seitenanfang

8.2 DokumentenformateZur nächsten Überschrift

Ein Dokumentenformat ist entweder textuell oder binär und beschreibt Textdokumente. Das Dokumentenformat kann selbst Text sein (wie HTML oder TeX) oder binär sein (wie DOC für Word-Dokumente).

ASCII bzw. UTF-8-kodierte Texte bilden die einfachste Form. Ihnen ist mit Dateiströmen leicht beizukommen. Das XML-Format wurde im vorangehenden Kapitel schon ausführlich vorgestellt – widmen wir uns anderen Dokumentenformaten.


Galileo Computing - Zum Seitenanfang

8.2.1 (X)HTMLZur nächsten ÜberschriftZur vorigen Überschrift

Ein Web-Browser bezieht (X)HTML-Seiten aus dem Internet und stellt sie dar. Doch ist (X)HTML nicht nur dort das Standardformat, sondern auch an anderen Stellen anzutreffen, etwa bei den Hilfeseiten von Eclipse oder bei Büchern, die ein Lesegerät wie der Amazon Kindle darstellt. Sind die HTML-Dokumente als XHTML-Dokumente geschrieben, so lassen sie sich auch einfach einlesen, nämlich über die bekannten XML-Technologien. Und läge dann ein HTML-Dokument als DOM-Baum vor, so hätte das den Vorteil, dass sich das HTML-Dokument einfach untersuchen – etwa mit XPath – oder leicht konvertieren ließe. Beim Schreiben ist es genauso: Ein DOM-Baum mit XHTML ist leicht geschrieben, genauso wie ein StAX-Writer schnell einen XHTML-Strom generiert.

Das Problem dabei ist nur, dass HTML-Dokumente oft nicht XML-konform sind (oder direkt validiertes XHTML sind), also Fehler enthalten. Beim Einlesen von nicht-validen HTML-Dokumenten würde der strenge XML-Parser Fehler melden und abbrechen. Ein einfaches Erfragen mit XPath ist dann nicht mehr möglich.

JTidy

Für HTML-Dokumente, die nicht ganz XML-rein sind, gibt es mit JTidy (http://jtidy.sourceforge.net/) eine freie Bibliothek, die HTML-Dokumente einliest, Fehler (so weit wie möglich) korrigiert und das XML-Dokument als ordentlichen DOM-Baum repräsentiert. Die Benutzung ist einfach:

Tidy tidy = new Tidy();
// tidy.setMakeClean( true ); // Ohne Störungen
// tidy.setXmlTags( true ); // Eingabe als XML behandeln
org.w3c.dom.Document node = tidy.parseDOM( in, null );

in steht für einen InputStream, der die Daten bereitstellt. Neben parseDOM(), das ein org.w3c.dom.Document liefert, gibt es auch parse(), das das Wurzelelement als org.w3c.tidy.Node liefert. Der zweite Parameter von parseDOM() – in unserem Beispiel mit null belegt – steht für ein Ausgabe-Objekt. Wird auf dem Tidy-Objekt die Methode parseXXX(in, out) aufgerufen, so schreibt JTidy einen korrekten XML-Strom in das gegebene OutputStream-Objekt. Unter http://jtidy.sourceforge.net/apidocs/index.html ist die API-Dokumentation verfügbar. Die Lizenz von JTidy ist zwar keine übliche, wie GPL oder Apache, aber trotzdem lässt sich die Bibliothek frei verwenden.

CyberNeko

In einigen Fällen zickt auch JTidy und bricht mit vielen Meldungen ab. Für diesen Fall bietet sich eine Alternative an: der HTML-Parser CyberNeko (http://people.apache.org/~andyc/neko/doc/html/index.html).

InputStream in = new FileInputStream( path );
org.cyberneko.html.parsers.DOMParser parser = new org.cyberneko.html.parsers.DOMParser();
parser.parse( new InputSource(in) );

Um das XML-Dokument als JDOM-Document weiterzuverarbeiten, nutzen wir einen DOMBuilder:

DOMBuilder builder = new DOMBuilder();
org.jdom.Document document = builder.build( parser.getDocument() );

HtmlCleaner

Der HtmlCleaner (http://htmlcleaner.sourceforge.net/) ist eine Bibliothek unter der BSD-Lizenz, die mit Zeilen wie den folgenden eine Eingabe in einen String, Ausgabestrom oder DOM-Baum überträgt:

HtmlCleaner cleaner = new HtmlCleaner( input );
String s = cleaner.getCompactXmlAsString();
cleaner.writeXmlToStream( outputStream );
org.w3c.dom.Document dom1 = cleaner.createDOM();
org.jdom.Document dom2 = cleaner.createJDom();

Der HtmlCleaner kommt zusätzlich mit einem Kommandozeilenprogramm und Ant-Task daher.


Galileo Computing - Zum Seitenanfang

8.2.2 PDF-DokumenteZur nächsten ÜberschriftZur vorigen Überschrift

Der PDF-Standard ist ein offener Standard, der gut beschrieben ist und für den es unterschiedliche Generatoren und Tools zum Editieren gibt. In Java hat die Open-Source-Bibliothek iText (http://www.lowagie.com/iText/) einen guten Ruf, um PDF-Dokumente zu erzeugen, sie zu verschmelzen oder PDF-Formulare zu füllen. Selbst ein Buch gibt es zu iText, und die Bibliothek wurde wegen ihres Erfolges nach .NET portiert. Leider hat iText die Lizenz auf GPL gewechselt und kann somit nicht mehr frei in geschlossenen Projekten verwendet werden. Bis Version 2.1.7 stand es unter der liberalen MPL, seit 5.x nicht mehr – es gab keine 3er und 4er Version dazwischen.

Eine weitere PDF-Bibliothek ist Apache PDFBox (http://pdfbox.apache.org/) mit einem etwas anderen Fokus. Die Stärke von iText ist eher das Erstellen von PDF-Dokumenten nach den neusten PDF-Standards, und die PDFBox kann gut Texte extrahieren und Dokumente modifizieren.


Galileo Computing - Zum Seitenanfang

8.2.3 Microsoft Office-DokumenteZur nächsten ÜberschriftZur vorigen Überschrift

Auch wenn sich die Welt nach freien und quelloffenen Lösungen sehnt, Microsoft Office ist immer noch eines der bestverkauften Produkte auf diesen Planeten – mit dem MS-Dokumentenformat als Sonne im Mittepunkt. Da die Dokumentation von Microsofts Dateiformaten mittlerweile zugänglich[59](http://www.microsoft.com/interop/docs/officebinaryformats.mspx) ist, gibt es auch Java-Bibliotheken, die MS-Office-Dokumente einlesen, modifizieren und schreiben. Bekannt dafür ist Apache POI[60](POI steht für Poor Obfuscation Implementation, weil das Dateiformat so kryptisch ist. Die Kürzel der Komponenten beginnen in der Regel mit »H« was für »Horrible« steht .) (http://poi.apache.org/), das APIs für folgende Formate (Komponenten genannt) bietet:

Tabelle 8.1: POI-Komponenten nach http://poi.apache.org/overview.html#components

POI-Komponente Aufgabe Grad der Unterstützung

HSSF, XSSF

Excel XLS, Excel XLSX

Gut

HSLF, XSLF

PowerPoint PPT, PowerPoint PPTX

Ausreichend

HWPF, XWPF

Word DOC, Word DOCX

Befriedigend

HDGF

Visio VSD

Rudimentär, nur lesen

HPBF

Publisher PUB

Rudimentär, nur lesen

HMEF/HSMF

Outlook MSG / Microsoft TNEF (Transport Neutral Encoding Format)

Rudimentär, nur lesen

OpenXML4J

Open Packaging Conventions (OPC)/OOXML

Gut

POIFS

OLE 2 Compound Document (OLE2 Filesystem)

Sehr gut

HPSF

OLE2 Property Sets

Sehr gut

OpenXML4J und POIFS sind keine üblichen Dokumentenformate, aber Archivformate für Microsoft-Dokumente (analog zu Zip). HPSF erlaubt den Zugriff auf Datei-Metadaten wie Autor, Titel usw.

Neben POI gibt es nicht mehr so viele Alternativen, eher kleinere Bibliotheken, die sich auf ein Format spezialisiert haben. So gibt es etwa Java Excel API (http://jexcelapi.sourceforge.net/) für Excel, das eine sehr einfache und intuitive API hat, aber beim Lesen oft Probleme bereitet. Nur wurde es bisher seit 2 Jahren nicht mehr aktualisiert. Eine kommerzielle und gute Lösung bieten die Aspose Java Components (http://www.aspose.com/categories/java-components/ aspose.total-for-java/default.aspx). Der Vorteil jeder gekauften Lösung ist, dass damit auch gleich Support enthalten ist, und die Java-Bibliothek von Aspose hat einen guten Ruf. Die Bibliotheken gibt es auch für .NET.

Für den Zugriff auf MS Access-Datenbanken gibt es die quelloffene Bibliothek Jackcess (http://jackcess.sourceforge.net/), die auch eine sehr aktuelle Fluent-API hat. Auf MS Access lässt sich aber auch per ODBC zurückgreifen; Kapitel 16, »Datenbankmanagement mit JDBC«, gibt eine kleine Übersicht.

Das neue Office-Format basiert auf XML und ist so auch deutlich einfacher zu verarbeiten als das binäre Format; XML-Dokumente in Zip-Archiven kann Java auch mit Bordmitteln lesen und erzeugen. Das XML-Format selbst ist im Standard Office Open XML beschrieben. Für Word-Dokumente gibt es zum Beispiel das relativ neue Projekt java2word (http://code. google.com/p/java2word/).


Galileo Computing - Zum Seitenanfang

8.2.4 OASIS Open Document FormatZur vorigen Überschrift

Neben Office Open XML gibt es das OASIS Open Document Format – mit Dateiformaten wie OpenDocument (ODF) für Textdokumente, die etwa von OpenOffice verarbeitet werden. Eine Bibliothek zum Verarbeiten bietet das ODF Toolkit (http://odftoolkit.org/). OpenOffice kann auch mit einer sogenannten UNO-Brücke gesteuert werden, doch das ist extrem ressourcenlastig, denn OpenOffice läuft dann komplett im Hintergrund. Das bietet aber zumindest die Möglichkeit, Dokumente in PDF zu konvertieren. Eine andere quelloffene Bibliothek ist jOpenDocument (http://jopendocument.org/) vom französischen Unternehmen ILM Informatique. jOpenDocument kann Texte und Tabellen lesen, modifizieren und schreiben sowie grafisch in einem Swing-Fenster darstellen. Allerdings steht die Bibliothek unter der GPL, was bedeutet, dass für den kommerziellen Einsatz mit geschlossenen Quellen eine Lizenzgebühr zu entrichten ist. Updates sind in letzter Zeit etwas unregelmäßiger geworden.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.







<< zurück
  Zum Katalog
Zum Katalog: Java 7 – Mehr als eine Insel
Java 7 – Mehr als eine Insel
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Java und XML






 Java und XML


Zum Katalog: Einstieg in Eclipse 3.7






 Einstieg in
 Eclipse 3.7


Zum Katalog: Android 3






 Android 3


Zum Katalog: NetBeans Platform 7






 NetBeans Platform 7


Zum Katalog: Java ist auch eine Insel






 Java ist
 auch eine Insel


Zum Katalog: Apps entwickeln für Android 4






 Apps entwickeln
 für Android 4


Zum Katalog: Java 7






 Java 7


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2012
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de