大数据Java基础第十九天作业

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据Java基础第十九天作业相关的知识,希望对你有一定的参考价值。

第一题:简单的URL获取资源下载
import java.net.URL;
import java.net.URLConnection;

import java.io.InputStream;
import java.io.FileOutputStream;

class DownloadDemo{
    public static void main(String[] args){
        String src_url = "http://one.jiangmin.com/jiangmin.zip";
        try{
            URL url = new URL(src_url);
            URLConnection conn = url.openConnection();
            String type = conn.getContentType();
            int length = conn.getContentLength();
            InputStream in = conn.getInputStream();
            FileOutputStream fos = new FileOutputStream("e:/jiangmin.zip");
            byte[] buf = new byte[1024];
            int len = 0;
            while((len = in.read(buf)) != -1){
                fos.write(buf);
            }
            fos.close();
            in.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

第二题:URL多线程下载
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JButton;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import java.net.URL;
import java.net.URLConnection;

import java.io.InputStream;
import java.io.RandomAccessFile;

import java.util.List;
import java.util.ArrayList;

class Download{
    private static final long serialVersionUID = -6944831795769317874L;
    public static void main(String[] args){
        new DownloadWindow();
    }
}

class DownloadWindow extends JFrame{
    private JTextArea url_text;
    private JTextArea local_text;
    public DownloadWindow(){
        ini();
    }
    public void ini(){
        this.setSize(600,400);
        this.setLocation(600,300);
        this.setLayout(null);

        JLabel url_label = new JLabel("URL : ");
        url_label.setBounds(10,10,100,20);
        this.add(url_label);

        url_text = new JTextArea();
        url_text.setEditable(true);
        url_text.setBounds(100,10,400,20);
        this.add(url_text);

        JLabel local_label = new JLabel("Local : ");
        local_label.setBounds(10,40,100,20);
        this.add(local_label);

        local_text = new JTextArea();
        local_text.setEditable(true);
        local_text.setBounds(100,40,400,20);
        this.add(local_text);

        JButton down_button = new JButton("Download");
        down_button.setBounds(200,110,200,50);
        down_button.addMouseListener(new MouseAdapter(){
            public void mouseClicked(MouseEvent e){
                String src_url = url_text.getText();
                System.out.println(src_url);
                String local_addr = local_text.getText();
                new DownloadManager(DownloadWindow.this,src_url,local_addr,5).start();
            }
        });
        this.add(down_button);
        this.setVisible(true);
    }
}

class DownloadManager{
    private DownloadWindow window;
    private String src_url;
    private String local_addr;
    private int count;
    private DownloadInfo info;
    private List<DownloadInfo> info_list;
    public DownloadManager(DownloadWindow window,String src_url,String local_addr,int count){
        this.window = window;
        "http://blog.51cto.com/viewpic.php?refimg=" + this.src_url = src_url;
        this.local_addr = local_addr;
        this.count = count;
        prepareDownload();
    }
    public void prepareDownload(){
        info_list = new ArrayList<DownloadInfo>();
        try{
            URL url = new URL(src_url);
            System.out.println(src_url);
            int total_length = url.openConnection().getContentLength();
            RandomAccessFile raf = new RandomAccessFile(local_addr,"rw");
            raf.setLength(total_length);
            raf.close();
            System.out.println(total_length);
            System.out.println(count);
            int block = total_length / count;
            DownloadInfo info = null;
            for(int i = 0;i < count;i++){
                info = new DownloadInfo();
                info.setSrcUrl(src_url);
                info.setLocalAddr(local_addr);
                if((count - 1) == i){
                    info.setEndPos(total_length - 1);
                }else{
                    info.setStartPos((i + 1) * block - 1);
                }
                info_list.add(info);
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    public void start(){
        int i = 0;
        for(DownloadInfo info : info_list){
            System.out.println(i);
            new DownloadThread(window,info).start();
            i++;
        }
    }
}

class DownloadThread extends Thread{
    private DownloadWindow window;
    private DownloadInfo info;
    public DownloadThread(DownloadWindow window,DownloadInfo info){
        this.window = window;
        this.info = info;
    }
    public void run(){
        try{
            System.out.println(info.getSrcUrl());
            URL url = new URL(info.getSrcUrl());
            URLConnection connect = url.openConnection();
            connect.setRequestProperty("Range","bytes=" + info.getStartPos() + "-" + info.getEndPos());
            InputStream in = connect.getInputStream();
            RandomAccessFile raf = new RandomAccessFile(info.getLocalAddr(),"rw");
            raf.seek(info.getEndPos());
            byte[] buf = new byte[1024];
            int len = 0;
            while((len = in.read(buf)) != -1){
                raf.write(buf);
            }
            raf.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

class DownloadInfo{
    private String src_url;
    private String local_addr;
    private int start_pos;
    private int end_pos;
    public DownloadInfo(){
    }
    public DownloadInfo(String src_url,String local_addr,int start_pos,int end_pos){
        "http://blog.51cto.com/viewpic.php?refimg=" + this.src_url = src_url;
        this.local_addr = local_addr;
        this.start_pos = start_pos;
        this.end_pos = end_pos;
    }
    public String getSrcUrl(){
        return src_url;
    }
    public void setSrcUrl(String src_url){
        "http://blog.51cto.com/viewpic.php?refimg=" + this.src_url = src_url;
    }
    public String getLocalAddr(){
        return local_addr;
    }
    public void setLocalAddr(String local_addr){
        this.local_addr = local_addr;
    }
    public int getStartPos(){
        return start_pos;
    }
    public void setStartPos(int start_pos){
        this.start_pos = start_pos;
    }
    public int getEndPos(){
        return end_pos;
    }
    public void setEndPos(int end_pos){
        this.end_pos = end_pos;
    }
}


以上是关于大数据Java基础第十九天作业的主要内容,如果未能解决你的问题,请参考以下文章

大数据Java基础第十二天作业

大数据Java基础第十五天作业

IT十八掌作业_java基础第九天_多线程自动拆装箱

IT十八掌作业_java基础第十七天_QQ案例

IT十八掌作业_java基础第十六天_GUI/socket

大数据JAVA基础第九天