Wie können eine HTML-Datei und ihr Quelltext dargestellt werden?

Das Beispiel verdeutlicht dreierlei:

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.

Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.