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?
<< zurück | Galileo Computing / <openbook> / Java 7 - Mehr als eine Insel | vor >>
Java 7 - Mehr als eine Insel von Christian Ullenboom Das Handbuch zu den Java SE-Bibliotheken
Java 7 - Mehr als eine Insel Galileo Computing 1433 S., 2012, geb. 49,90 Euro, ISBN 978-3-8362-1507-7 |
| 8 Dateiformate
|  | 8.1 Einfache Dateiformate für strukturierte Daten
|  |  | 8.1.1 Property-Dateien
|  |  | 8.1.2 CSV-Dateien
|  |  | 8.1.3 JSON-Serialisierung mit Jackson
|  | 8.2 Dokumentenformate
|  |  | 8.2.1 (X)HTML
|  |  | 8.2.2 PDF-Dokumente
|  |  | 8.2.3 Microsoft Office-Dokumente
|  |  | 8.2.4 OASIS Open Document Format
|  | 8.3 Datenkompression *
|  |  | 8.3.1 Java-Unterstützung beim Komprimieren
|  |  | 8.3.2 Daten packen und entpacken
|  |  | 8.3.3 Datenströme komprimieren
|  |  | 8.3.4 Zip-Archive
|  |  | 8.3.5 Jar-Archive
|  | 8.4 Bild-Formate
|  | 8.5 Audio-Dateien
|  |  | 8.5.1 Die Arbeit mit AudioClip
|  |  | 8.5.2 MIDI-Dateien abspielen
## 8.2 Dokumentenformate 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. ### 8.2.1 (X)HTML 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. ### 8.2.2 PDF-Dokumente 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. ### 8.2.3 Microsoft Office-Dokumente 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/). ### 8.2.4 OASIS Open Document Format 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. >> Zum Feedback-Formular
<< zurück | <top> | vor >>
Zum Katalog
Java 7 – Mehr als eine Insel Jetzt bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung
Buchempfehlungen
| Java und XML
| Einstieg in Eclipse 3.7
| Android 3
| NetBeans Platform 7
| Java ist auch eine Insel
| Apps entwickeln für Android 4
| Java 7
Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

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