Webseiten herunterladen und speichern: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Die Seite wurde neu angelegt: „Folgender vollständiger Code zeigt, wie man Webseiten herunterladen und speichern kann: <syntaxhighlight lang="java" line="true"> import java.io.*; import ja…“
 
K L-ectron-X verschob die Seite Webseiten speichern nach Webseiten herunterladen und speichern, ohne dabei eine Weiterleitung anzulegen
(kein Unterschied)

Version vom 15. Januar 2019, 16:28 Uhr

Folgender vollständiger Code zeigt, wie man Webseiten herunterladen und speichern kann:

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import javax.swing.filechooser.*;

public class GrapHtmlDemo {
   private final JFrame frame;
   private JTextField targetField;
   private JTextArea tArea;
   private JTabbedPane tabbedPane;
   private JFileChooser chooser;

   public GrapHtmlDemo(String title) {
      JPanel panel = new JPanel(new BorderLayout(0, 5));
      panel.setBorder(BorderFactory.createEmptyBorder(10, 5, 10, 5));
      targetField = new JTextField();
      targetField.addActionListener(new TargetFieldAction());
      tabbedPane = new JTabbedPane();
      tabbedPane.setTabPlacement(JTabbedPane.BOTTOM);
      tArea = new JTextArea();
      tabbedPane.addTab("HTML-Code", new JScrollPane(tArea));

      panel.add(createNorthPanel(), BorderLayout.NORTH);
      panel.add(tabbedPane, BorderLayout.CENTER);
      panel.add(createSouthPanel(), BorderLayout.SOUTH);

      chooser = new JFileChooser();
      FileNameExtensionFilter filter = new FileNameExtensionFilter(
        "Plain Text", "txt", "html", "css", "js");
      chooser.setFileFilter(filter);
      
      frame = new JFrame(title);
      Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
      frame.setSize(dim.width * 66 / 100, dim.height * 66 / 100);
      frame.setLocationRelativeTo(null);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.add(panel);
      frame.setVisible(true);
   }

   private JPanel createNorthPanel() {
      JPanel panel = new JPanel(new BorderLayout(5, 0));
      panel.add(new JLabel("URL:"), BorderLayout.WEST);
      panel.add(targetField, BorderLayout.CENTER);
      panel.add(new JButton(new TargetFieldAction("Los!")), BorderLayout.EAST);
      return panel;
   }

   private JPanel createSouthPanel() {
      JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
      panel.add(new JButton(new StoreAction("Speichern")), BorderLayout.EAST);
      return panel;
   }

   private void readContent(URL url) throws Exception {
      Scanner scan = new Scanner(url.openStream());
      if (scan != null) {
         while(scan.hasNextLine()) {
            tArea.append(scan.nextLine()+"\n\r");
         }
      }
   }

   private void storeContent() {
      int result = chooser.showSaveDialog(frame);
      if(result == JFileChooser.APPROVE_OPTION) {
         File file = chooser.getSelectedFile();
         try {
            BufferedWriter writer = new BufferedWriter(new FileWriter(file));         
            writer.write(tArea.getText());
            writer.flush();
            writer.close();
         } catch(IOException e) {
            System.err.println(e);
            JOptionPane.showMessageDialog(frame, e.getClass().getName(),
               "ERROR: Fehler beim Schreiben der Datei auf den Datenträger!",
               JOptionPane.ERROR_MESSAGE);
         }
      }
   }

   public static void main(String[] args) {
      try {
         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      }
      catch(Exception e) {
         System.err.println(e);
      }

      SwingUtilities.invokeLater(new Runnable() {
         @Override
         public void run() {
            new GrapHtmlDemo("HTML-Code von Webseiten");
         }
      });
   }

   class TargetFieldAction extends AbstractAction {
      TargetFieldAction() {
         this(null);
      }
      
      TargetFieldAction(String text) {
         super(text);
      }
      
      @Override
      public void actionPerformed(ActionEvent e) {
         if(tabbedPane.getTabCount() > 1) {
            tabbedPane.remove(1);
         }
         String urlString = targetField.getText().trim();
         if(!urlString.startsWith("http")) {
            urlString = "https://" + urlString;
            targetField.setText(urlString);
         }
         try {
            tArea.setText(null);
            readContent(new URL(urlString));
         }
         catch(Exception ex) {
            JTextArea eArea = new JTextArea(ex.toString());
            eArea.setBackground(Color.PINK);
            tabbedPane.addTab("Error", new JScrollPane(eArea));
            tabbedPane.setSelectedIndex(1);
         }
      }
   }

   class StoreAction extends AbstractAction {
      StoreAction(String text) {
         super(text);
      }
      
      @Override
      public void actionPerformed(ActionEvent e) {
         storeContent();
      }
   }

}