- Darstellung einer aus dem Internet geladenen HTML-Datei
- Auslesen einer HTML-Datei mittels
InputStreamReader
- Auslesen einer HTML-/Text-Datei als Resource aus einer *.jar-Datei
Zum Laden einer Datei aus dem Internet muss eine intakte
Internet-Verbindung existieren. Zudem muss beachtet werden, dass
Java lediglich HTML 3.2 unterstützt. Fortgeschrittenere
Stylesheets bleiben somit außen vor.
Im Beispiel
werden im Hauptfenster innerhalb eines JTabbedPane
zwei scrollbare JEditorPane
geladen, die die
HTML-Seite und deren Quelltext darstellen. Die Methode setURL()
übernimmt diese Funktionalität.
Innerhalb eines
try-catch-Blockes, der Fehler durch falsche URL-Syntax und durch
IO-Probleme abfängt, wird zunächst ein URL-Objekt
erstellt. Dies kann zur Darstellung der HTML-Seite direkt an JEditorPane
übergeben werden. Zur Darstellung des Quelltextes muss
dieser ausgelesen werden. Hierzu kann über die URL ein InputStream
geöffnet werden, der einem InputStreamReader
als Basis dient.
Dessen Methode read()
liest
in einer while-Schleife jedes einzelne char
als int
aus. Am Ende der Datei wird -1 zurückgegeben und die
Schleife bricht ab. Innerhalb der Schleife wird jedes int
zu char
gecastet und einem StringBuffer
hinzugefügt. Dieser kann, nach Wandel in einen String
,
auf dem JEditorPane
als Quelltext dargestellt
werden.
import java.awt.Toolkit;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
public class HTMLDarstellenClass {
private static final long serialVersionUID = 1L;
private JEditorPane htmlPane, textPane;
public HTMLDarstellenClass() {
htmlPane = new JEditorPane();
htmlPane.setContentType("text/html");
JScrollPane htmlSP = new JScrollPane(htmlPane);
textPane = new JEditorPane();
textPane.setContentType("text/plain");
JTabbedPane tabbedPane = new JTabbedPane();
JScrollPane textSP = new JScrollPane(textPane);
tabbedPane.add(htmlSP, "HTML");
tabbedPane.add(textSP, "Quelltext");
setURL();
JFrame frame = new JFrame("HTML darstellen");
frame.add(tabbedPane);
frame.setSize(Toolkit.getDefaultToolkit().getScreenSize());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private void setURL() {
try {
URL url = new URL("https://javabeginners.de");
InputStream in = url.openStream();
InputStreamReader isr = new InputStreamReader(in);
StringBuffer buff = new StringBuffer();
int len;
while ((len = isr.read()) != -1) {
buff.append((char) len);
}
in.close();
isr.close();
htmlPane.setPage(url);
textPane.setText(buff.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new HTMLDarstellenClass());
}
}
Oft kommt es vor, dass HTML- oder Text-Dateien als Resource,
z.B. innerhalb einer jar-Datei, enthalten sind und von dort
geladen werden sollen. Hierzu stellt die Klasse Class
die Methode getResource(String datei)
bereit. Die
jeweilige Datei muss im Classpath liegen und mit dem
vollständigen Paketnamen angegeben werden. Dieser beginnt
immer mit '/' und muss als Verzeichnistrenner nicht den sonst
üblichen '.', sondern - auch unter Windows - den '/'
besitzen:
Liegt auf der obersten Ebene einer jar-Datei z.B. eine Datei test.htm, so wird sie geladen durch
Class klasse = getClass(); URL url = klasse.getResource("/test.htm");
liegt sie im package 'de.javabeginners
', so lautet
der Aufruf
URL url = klasse.getResource("/de/javabeginners/test.htm");
Soll anstatt einer HTML-Datei eine Plain-Text-Datei geladen
werden, so ist an Stelle der Methode getResource()
die Methode getResourceAsStream(String datei)
zu
verwenden. Sie liefert einen InputStream, der auf die im
Beispiel angegebene Weise weiterverarbeitet werden kann.