一个java实现的简单文件下载程序

来源:互联网 发布:安卓变女声软件 编辑:程序博客网 时间:2024/05/16 10:29
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;


public class ReadInternetFile
{
    public ReadInternetFile()
    {
        // TODO Auto-generated constructor stub
    }
    public URL getUrl()
    {
        return this.url;
    }
    public void setUrl() throws MalformedURLException
    {
        String url = null;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        try
        {
            url = br.readLine();
            this.url = new URL(url); 
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
    public void setFileSaveName(URL url)
    {
        String file = url.getFile();
        this.fileName = file.substring(file.lastIndexOf("/") + 1);
    }
    private String getFileName()
    {
         return this.fileName;
    }
    private URL url = null;
    private static final String fileSavePath = "E:\\myftp\\download\\";
    private String fileName = null;
    
    public static void main(String []args)
    {
        Long start = System.currentTimeMillis();
        System.out.println("please input the url of the file:");
        ReadInternetFile fileReader = new ReadInternetFile();
        try
        {
            fileReader.setUrl();
            URL fileUrl = fileReader.getUrl();
            fileReader.setFileSaveName(fileUrl);
            
            HttpURLConnection conn = (HttpURLConnection)fileUrl.openConnection();
            conn.setConnectTimeout(5000);
            DataInputStream din = new DataInputStream(conn.getInputStream());
            String savedFileName = fileReader.getFileName();
            DataOutputStream dout = new DataOutputStream(new FileOutputStream(fileSavePath + savedFileName));
            
            BufferedInputStream bin = new BufferedInputStream(din,4096);
            BufferedOutputStream bout = new BufferedOutputStream(dout);
            byte [] buffer = new byte[4*1024];
            int count = 0;
            while ((count = bin.read(buffer)) > 0)
            {
                //如果使用bout.write(buffer)方法图片会失真,而且下载的速度快慢与否与网络环境有很大的关系,
//                dout.write(buffer, 0, count);
                bout.write(buffer,0,count);
            }
            bout.close();
            bin.close();
            conn.disconnect();
            System.out.println("file " + savedFileName + " successfully downloaded !");
            System.out.println("Time used:" + (System.currentTimeMillis() - start));
        }
        catch (MalformedURLException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
   
}