Webseiten herunterladen und speichern: Unterschied zwischen den Versionen
Aus Byte-Welt Wiki
K L-ectron-X verschob die Seite Webseiten speichern nach Webseiten herunterladen und speichern, ohne dabei eine Weiterleitung anzulegen |
KKeine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
Folgender vollständiger Code zeigt, wie man Webseiten | Folgender vollständiger Code zeigt, wie man Webseiten mit Java downloaden und auf der Festplatte speichern kann: | ||
<syntaxhighlight lang="java" line="true"> | <syntaxhighlight lang="java" line="true"> | ||
Version vom 15. Januar 2019, 16:29 Uhr
Folgender vollständiger Code zeigt, wie man Webseiten mit Java downloaden 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.*;
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();
}
}
}
