第一题:简单的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;
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){
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){
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;
}
}
转载于:https://blog.51cto.com/senlinmin/1790906