Development Java Tutorial

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.URL;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLEditorKit;
public class MainClass {
  private static void parse(URL url, String encoding) throws IOException {
    ParserGetter kit = new ParserGetter();
    HTMLEditorKit.Parser parser = kit.getParser();
    InputStream in = url.openStream();
    InputStreamReader r = new InputStreamReader(in, encoding);
    HTMLEditorKit.ParserCallback callback = new Outliner(new OutputStreamWriter(System.out));
    parser.parse(r, callback, true);
  }
  public static void main(String[] args) throws Exception {
    ParserGetter kit = new ParserGetter();
    HTMLEditorKit.Parser parser = kit.getParser();
    String encoding = "ISO-8859-1";
    URL url = new URL("http://www.rntsoft.com");
    InputStream in = url.openStream();
    InputStreamReader r = new InputStreamReader(in, encoding);
    // parse once just to detect the encoding
    HTMLEditorKit.ParserCallback doNothing = new HTMLEditorKit.ParserCallback();
    parser.parse(r, doNothing, false);
    parse(url, encoding);
  }
}
class Outliner extends HTMLEditorKit.ParserCallback {
  private Writer out;
  private int level = 0;
  private boolean inHeader = false;
  private static String lineSeparator = System.getProperty("line.separator", "\r\n");
  public Outliner(Writer out) {
    this.out = out;
  }
  public void handleStartTag(HTML.Tag tag, MutableAttributeSet attributes, int position) {
    int newLevel = 0;
    if (tag == HTML.Tag.H1)
      newLevel = 1;
    else if (tag == HTML.Tag.H2)
      newLevel = 2;
    else if (tag == HTML.Tag.H3)
      newLevel = 3;
    else if (tag == HTML.Tag.H4)
      newLevel = 4;
    else if (tag == HTML.Tag.H5)
      newLevel = 5;
    else if (tag == HTML.Tag.H6)
      newLevel = 6;
    else
      return;
    this.inHeader = true;
    try {
      if (newLevel > this.level) {
        for (int i = 0; i < newLevel - this.level; i++) {
          out.write("
    " + lineSeparator + "
  • ");
            }
          } else if (newLevel < this.level) {
            for (int i = 0; i < this.level - newLevel; i++) {
              out.write(lineSeparator + "
" + lineSeparator);
        }
        out.write(lineSeparator + "
  • ");
          } else {
            out.write(lineSeparator + "
  • ");
          }
          this.level = newLevel;
          out.flush();
        } catch (IOException ex) {
          System.err.println(ex);
        }
      }
      public void handleEndTag(HTML.Tag tag, int position) {
        if (tag == HTML.Tag.H1 || tag == HTML.Tag.H2 || tag == HTML.Tag.H3 || tag == HTML.Tag.H4
            || tag == HTML.Tag.H5 || tag == HTML.Tag.H6) {
          inHeader = false;
        }
        // work around bug in the parser that fails to call flush
        if (tag == HTML.Tag.HTML)
          this.flush();
      }
      public void handleText(char[] text, int position) {
        if (inHeader) {
          try {
            out.write(text);
            out.flush();
          } catch (IOException ex) {
            System.err.println(ex);
          }
        }
      }
      public void flush() {
        try {
          while (this.level-- > 0) {
            out.write(lineSeparator + "");
          }
          out.flush();
        } catch (IOException e) {
          System.err.println(e);
        }
      }
      private static void parse(URL url, String encoding) throws IOException {
        ParserGetter kit = new ParserGetter();
        HTMLEditorKit.Parser parser = kit.getParser();
        InputStream in = url.openStream();
        InputStreamReader r = new InputStreamReader(in, encoding);
        HTMLEditorKit.ParserCallback callback = new Outliner(new OutputStreamWriter(System.out));
        parser.parse(r, callback, true);
      }
    }
    class ParserGetter extends HTMLEditorKit {
      public HTMLEditorKit.Parser getParser() {
        return super.getParser();
      }
    }