?? batchdownload.java
字號:
import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.WindowEvent;import java.io.*;import java.net.MalformedURLException;import java.net.URL;import java.text.DecimalFormat;import java.util.Vector;/** * Author: Brian Lan * brian_lan99@yahoo.com */public class BatchDownload extends JFrame implements Runnable{ final int onetime = 10240; byte[] context = new byte[onetime]; boolean override; boolean useddir; boolean includeSub; String path; JLabel jLabel1 = new JLabel(); JTextField TextFieldURL = new JTextField(); JLabel LabelURL = new JLabel(); Component component1; JMenuBar jMenuBar1 = new JMenuBar(); JButton ButtonOk = new JButton(); JButton ButtonCancel = new JButton(); JPanel PanelOption = new JPanel(); JTextField TextField = new JTextField(); GridLayout gridLayout1 = new GridLayout(); JPanel PanelURL = new JPanel(); JPanel PanelNumber = new JPanel(); JLabel LabelStartEndNumber = new JLabel(); JTextField TextFieldStartNumber = new JTextField(); JPanel PanelSubDir = new JPanel(); JTextField TextFieldEndNumber = new JTextField(); JPanel PanelRemember = new JPanel(); JCheckBox CheckBoxRememberDir = new JCheckBox(); JPanel PanelSaveTo = new JPanel(); JTextField TextFieldSaveTo = new JTextField(); JLabel LabelSaveTo = new JLabel(); JPanel PanelButton = new JPanel(); JLabel LabelStatus = new JLabel(); JPanel PanelOverwrite = new JPanel(); JCheckBox CheckBoxOverwrite = new JCheckBox(); JCheckBox CheckBoxSubDir = new JCheckBox(); JButton ButtonChooser = new JButton(); public BatchDownload() { try { jbInit(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { //BatchDownload batchDownload = new BatchDownload(); BatchDownload batchDownload = new BatchDownload() { public synchronized void setTitle(String title) { super.setTitle(title); enableEvents(AWTEvent.WINDOW_EVENT_MASK); } }; batchDownload.setSize(new Dimension(480, 340)); batchDownload.setTitle("Smart Batch Download"); batchDownload.setVisible(true); } public void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } private void jbInit() throws Exception { PanelButton.setPreferredSize(new Dimension(420, 30)); PanelButton.setBounds(new Rectangle(18, 218, 422, 30)); ButtonOk.setPreferredSize(new Dimension(75, 23)); component1 = Box.createGlue(); this.getContentPane().setLayout(null); this.setLocale(java.util.Locale.getDefault()); this.setResizable(false); this.setState(Frame.NORMAL); this.setTitle("Smart Batch Download"); jLabel1.setFont(new java.awt.Font("Dialog", 1, 16)); jLabel1.setRequestFocusEnabled(true); jLabel1.setToolTipText(""); jLabel1.setHorizontalAlignment(SwingConstants.LEADING); jLabel1.setText("Smart Batch Download"); jLabel1.setBounds(new Rectangle(23, 10, 189, 29)); TextFieldURL.setMinimumSize(new Dimension(100, 21)); TextFieldURL.setOpaque(true); TextFieldURL.setPreferredSize(new Dimension(380, 21)); TextFieldURL.setText(""); TextFieldURL.setScrollOffset(0); LabelURL.setText("URL"); component1.setBounds(new Rectangle(425, 110, 0, 0)); ButtonOk.setText("OK"); ButtonOk.addActionListener(new BatchDownload_ButtonOk_actionAdapter(this)); ButtonCancel.setText("Cancel"); ButtonCancel.addActionListener(new BatchDownload_ButtonCancel_actionAdapter(this)); PanelOption.setPreferredSize(new Dimension(420, 75)); PanelOption.setBounds(new Rectangle(15, 93, 421, 61)); PanelOption.setLayout(gridLayout1); TextField.setBounds(new Rectangle(105, 118, 38, 22)); TextField.setText(""); gridLayout1.setColumns(2); gridLayout1.setHgap(5); gridLayout1.setRows(2); gridLayout1.setVgap(5); PanelURL.setBounds(new Rectangle(19, 48, 421, 35)); TextFieldEndNumber.setPreferredSize(new Dimension(25, 21)); TextFieldEndNumber.setText(""); CheckBoxRememberDir.setText("Use Last Directory "); CheckBoxRememberDir.addActionListener(new BatchDownload_CheckBoxRememberDir_actionAdapter(this)); PanelSaveTo.setPreferredSize(new Dimension(422, 38)); PanelSaveTo.setBounds(new Rectangle(24, 173, 425, 38)); TextFieldSaveTo.setMinimumSize(new Dimension(100, 21)); TextFieldSaveTo.setOpaque(true); TextFieldSaveTo.setPreferredSize(new Dimension(265, 21)); TextFieldSaveTo.setText(""); LabelSaveTo.setText("Save to directory "); LabelStatus.setText(""); LabelStatus.setBackground(new Color(123, 123, 230)); LabelStatus.setBounds(new Rectangle(11, 265, 450, 24)); PanelNumber.setAlignmentX((float) 0.5); PanelSubDir.setAlignmentY((float) 0.5); PanelNumber.setMinimumSize(new Dimension(60, 31)); PanelNumber.setPreferredSize(new Dimension(60, 31)); LabelStartEndNumber.setEnabled(true); LabelStartEndNumber.setForeground(Color.black); LabelStartEndNumber.setAlignmentX((float) 0.0); LabelStartEndNumber.setDoubleBuffered(false); LabelStartEndNumber.setHorizontalAlignment(SwingConstants.LEADING); LabelStartEndNumber.setHorizontalTextPosition(SwingConstants.TRAILING); LabelStartEndNumber.setText("Start End Number"); TextFieldStartNumber.setMinimumSize(new Dimension(25, 21)); TextFieldStartNumber.setPreferredSize(new Dimension(25, 21)); TextFieldStartNumber.setRequestFocusEnabled(true); TextFieldStartNumber.setText(""); TextFieldEndNumber.setMinimumSize(new Dimension(30, 21)); TextFieldEndNumber.setPreferredSize(new Dimension(30, 21)); TextFieldEndNumber.setRequestFocusEnabled(true); TextFieldEndNumber.setText(""); CheckBoxSubDir.setText("Include Sub Link"); CheckBoxOverwrite.setText("Overwrite existing File or Dir"); ButtonChooser.setText("Choose Directory"); ButtonChooser.addActionListener(new BatchDownload_ButtonChooser_actionAdapter(this)); PanelSaveTo.add(LabelSaveTo, null); PanelSaveTo.add(TextFieldSaveTo, null); this.getContentPane().add(component1, null); PanelURL.add(LabelURL, null); PanelURL.add(TextFieldURL, null); this.getContentPane().add(LabelStatus, null); this.getContentPane().add(jLabel1, null); this.getContentPane().add(PanelButton, null); this.getContentPane().add(PanelOption, null); PanelSubDir.add(CheckBoxSubDir, null); PanelOverwrite.add(CheckBoxOverwrite, null); PanelOption.add(PanelNumber, null); PanelOption.add(PanelOverwrite, null); PanelOption.add(PanelSubDir, null); PanelOption.add(PanelRemember, null); PanelNumber.add(LabelStartEndNumber, null); PanelNumber.add(TextFieldStartNumber, null); PanelNumber.add(TextFieldEndNumber, null); PanelRemember.add(CheckBoxRememberDir, null); this.getContentPane().add(PanelSaveTo, null); PanelButton.add(ButtonChooser, null); PanelButton.add(ButtonCancel, null); PanelButton.add(ButtonOk, null); this.getContentPane().add(PanelURL, null); LabelStatus.setText(""); } void ButtonCancel_actionPerformed(ActionEvent e) { System.exit(0); } void ButtonOk_actionPerformed(ActionEvent e) { new Thread(this).start(); } public void run() { String strUrl = TextFieldURL.getText(); if (strUrl.trim().equals("")) { LabelStatus.setText("Please input URL."); return; } else LabelStatus.setText("Start download ..."); URL url; int start = strUrl.lastIndexOf('/'); String filename = strUrl.substring(start + 1); if (filename.indexOf('\\') != -1 || filename.indexOf(':') != -1 || filename.indexOf('*') != -1 || filename.indexOf('\"') != -1 || filename.indexOf('<') != -1 || filename.indexOf('>') != -1 || filename.indexOf('|') != -1) { LabelStatus.setText("Illegal file name in URL."); return; } // get options override = CheckBoxOverwrite.getModel().isSelected(); useddir = CheckBoxRememberDir.getModel().isSelected(); includeSub = CheckBoxSubDir.getModel().isSelected(); // get path path = TextFieldSaveTo.getText(); if (path.charAt(path.length() - 1) != '\\') { path += '\\'; } // determining whether it's to download data for a year String[] months = { "01%20January", "02%20February", "03%20March", "04%20April", "05%20May", "06%20June", "07%20July", "08%20August", "09%20September", "10%20October", "11%20November", "12%20December" }; String year = null; if (strUrl.substring(strUrl.length() - 5).startsWith("200")) { year = strUrl.substring(strUrl.length() - 5, strUrl.length() - 1); } else if (strUrl.substring(strUrl.length() - 4).startsWith("200")) { year = strUrl.substring(strUrl.length() - 4, strUrl.length() - 1); strUrl += "/"; } // write the path to configuration file try { File config = new File("Batchdown.ini"); FileWriter out = new FileWriter(config); out.write(path + ">"); out.close(); } catch (IOException ex) { } // get the count number of "#" in the filename int position = filename.indexOf('#'); int count = 0; // how many files successful download String replacement; if (position == -1) // not include # { if (year == null) downloadDir(strUrl, path); else { for (String month : months) count += downloadDir(strUrl + month + "/", getYYMMPath(path, year + month.substring(0, 2))); } } else { replacement = filename.substring(position, filename.lastIndexOf('#') + 1); String numberFormat = replacement.replaceAll("#", "0"); String sn, en; int startNumber, endNumber; try { sn = TextFieldStartNumber.getText(); en = TextFieldEndNumber.getText(); startNumber = Integer.parseInt(sn); endNumber = Integer.parseInt(en); } catch (NumberFormatException ex) { LabelStatus.setText("Illegal number."); return; } String thisFile; for (int i = startNumber, j = 1; i <= endNumber; i++, j++) { thisFile = strUrl.replaceFirst(replacement, new DecimalFormat(numberFormat).format(i)); try { url = new URL(thisFile); count += getInBinaryMode(url, "(" + j + "/" + (endNumber - startNumber + 1) + ")"); } catch (MalformedURLException ex) { } } } LabelStatus.setText("Downloaded " + count + " file(s)."); } int downloadDir(String strUrl, String dir) { int count = 0; // count the total download files String thisFile; path = dir; File pathFile = new File(path); if (!pathFile.isDirectory()) { if (override) { pathFile.mkdirs(); TextFieldSaveTo.setText(path); repaint(); } else { LabelStatus.setText("Directory not exist."); return count; } } try { URL url = new URL(strUrl); getInBinaryMode(url, "");
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -