Webseiten herunterladen und speichern: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
KKeine Bearbeitungszusammenfassung
KKeine Bearbeitungszusammenfassung
 
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Folgender, sehr einfacher, vollständiger Code zeigt, wie man Webseiten mit Java downloaden und auf der Festplatte speichern kann:
[[Datei:GrapHTML.png|mini]]
Folgender, sehr einfacher, vollständiger Code zeigt, wie man Webseiten in ein Java-Programm herunterladen und auf der Festplatte speichern kann:


<syntaxhighlight lang="java" line="true">
<syntaxhighlight lang="java" line="true">
Zeile 89: Zeile 90:
       if (scan != null) {
       if (scan != null) {
         while(scan.hasNextLine()) {
         while(scan.hasNextLine()) {
             tArea.append(scan.nextLine()+"\n\r");
             tArea.append(scan.nextLine());
            tArea.append("\n");
         }
         }
       }
       }
Zeile 160: Zeile 162:


</syntaxhighlight>
</syntaxhighlight>
{{Fragen stellen}}


[[Kategorie:Java-Codeschnipsel]]
[[Kategorie:Java-Codeschnipsel]]

Aktuelle Version vom 25. Juli 2019, 07:59 Uhr

Folgender, sehr einfacher, vollständiger Code zeigt, wie man Webseiten in ein Java-Programm herunterladen und auf der Festplatte 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.*;

/**
 * GrapHtmlDemo zeigt, wie man mit Java Quelltext von Webseiten herunterladen und speichern kann.
 *
 * @author Gernot Segieth
 */
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", "php", "java", "xml");
      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 getContent() {
      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);
      }
   } 

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

   private void storeContent() {
      String text = tArea.getText();
      if(!text.isEmpty()) {
         int result = chooser.showSaveDialog(frame);
         if(result == JFileChooser.APPROVE_OPTION) {
            File file = chooser.getSelectedFile();
            try {
               BufferedWriter writer = new BufferedWriter(new FileWriter(file));         
               writer.write(text);
               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) {
         getContent();
      }
   }

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

}


Das Thema wurde nicht ausreichend behandelt? Du hast Fragen dazu und brauchst weitere Informationen? Lass Dir von uns helfen!

Wir helfen dir gerne!


Dir hat dieser Artikel gefallen? Oder Du hast Fehler entdeckt und möchtest zur Berichtigung beitragen? Prima! Schreibe einen Kommentar!

Du musst angemeldet sein, um einen Kommentar abzugeben.