大数据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;
    }
}
时间: 2024-11-06 08:46:26

大数据Java基础第十九天作业的相关文章

大数据Java基础第十天作业

import java.util.List; import java.util.ArrayList; class ListDemo{          @SuppressWarnings(value="unchecked")     public static void main(String[] args){         List list = new ArrayList();         list.add(100);         list.add(new Integer

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

第一题:实现文件拆分.合并. import java.io.File; import java.io.RandomAccessFile; import java.io.FileOutputStream; import java.io.FileInputStream; import java.io.BufferedOutputStream; import java.io.BufferedInputStream; import java.util.List; import java.util.Arr

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

使用Socket编写类似QQ通讯工具,显示屏幕的历史聊天记录待优化. import javax.swing.JFrame; import javax.swing.JButton; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; import java.awt.event

大数据Java基础第十六天、第十七天作业

使用Socket编写类似QQ通讯工具,显示屏幕的历史聊天记录待优化. import javax.swing.JFrame; import javax.swing.JButton; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; import java.awt.event

大数据JAVA基础第十天

1.继承extends(也叫扩展) 引入 首先写两个类: //定义学生类 class Student { //成员变量 private String name; private int age; //空构造 public Student(){} //getXxx()/setXxx() public void eat() { System.out.println("吃饭"); } } //定义教师类 class Teacher { //成员变量 private String name;

大数据JAVA基础第十四天

1.Java异常 在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式,输入值的范围,读取文件是否存在,网络是否始终保持通畅等等. 对于程序设计人员需要尽可能的预知所有可能发生的情况,尽可能的保证程序能在所有最糟糕的情况下都能运行. 但实际上,意外情况是不胜枚举的,程序可能发生的异常情况远远多于程序员所能考虑到的意外情况. Java的异常处理机制可以让程序具有良好的容错性,让程序更加健

大数据Java基础第七天作业

第一题: interface IWhite{     public void white(); } interface IRich{     public void rich(); } interface IBeauti{     public void beauti(); } interface IWRB extends IWhite,IRich,IBeauti{}; class RichMan{     public void toMarry(IWRB ws){         ws.whi

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

第二题: public class Person {     private String name;          public Person(){              }     public Person(String name){         super();         this.name = name;     }          public String getName(){         return this.name;     } } public c

大数据Java基础第五天作业

第一题:     加载类的时候执行静态代码块,静态代码块的作用为了初始化值. 第二题:     构造代码块先于构造函数的调用,和方法声明的位置无关.顺序是:加载类 => 执行静态代码块      => 实例化类 => 执行构造代码块 => 执行构造函数.     构造代码块的作用也是为了初始化对象属性成员的值. 第三题:     会执行静态代码块,Class.forName("Benz",flase,BenzDemo.class.getClassLoader()