⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 batchdownload.java

📁 A java GUI interface program used to download a batch of files in a specified URL, or a kind of simi
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -