java下载网络文件的N种方式

java下载网络文件的N种方式

通过java api下载网络文件的方法有很多,主要方式有以下几种:

1、使用 common-io库下载文件,需要引入commons-io-2.6.jar

public static void downloadByCommonIO(String url, String saveDir, String fileName) {
    try {
        FileUtils.copyURLToFile(new URL(url), new File(saveDir, fileName));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

 

2、使用NIO下载文件,需要 jdk 1.4+

public static void downloadByNIO(String url, String saveDir, String fileName) {
    ReadableByteChannel  rbc = null;
    FileOutputStream fos = null;
    FileChannel foutc = null;
    try {
        rbc = Channels.newChannel(new URL(url).openStream());
        File file = new File(saveDir, fileName);
        file.getParentFile().mkdirs();
        fos = new FileOutputStream(file);
        foutc = fos.getChannel();
        foutc.transferFrom(rbc, 0, Long.MAX_VALUE);
​
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (rbc != null) {
            try {
                rbc.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (foutc != null) {
            try {
                foutc.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
​
}

 

3、使用NIO下载文件,需要 jdk 1.7+

public static void downloadByNIO2(String url, String saveDir, String fileName) {
    try (InputStream ins = new URL(url).openStream()) {
        Path target = Paths.get(saveDir, fileName);
        Files.createDirectories(target.getParent());
        Files.copy(ins, target, StandardCopyOption.REPLACE_EXISTING);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

 

4、使用传统io stream下载文件

public static void downloadByIO(String url, String saveDir, String fileName) {
    BufferedOutputStream bos = null;
    InputStream is = null;
    try {
        byte[] buff = new byte[8192];
        is = new URL(url).openStream();
        File file = new File(saveDir, fileName);
        file.getParentFile().mkdirs();
        bos = new BufferedOutputStream(new FileOutputStream(file));
        int count = 0;
        while ((count = is.read(buff)) != -1) {
            bos.write(buff, 0, count);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (is != null) {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (bos != null) {
            try {
                bos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 

5、使用Byte Array获得stream下载文件

public static void  downLoadFromUrl(String urlStr,String fileName,String savePath) throws IOException{
    URL url = new URL(urlStr); 
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();  
    // 设置超时间为5秒
    conn.setConnectTimeout(5*1000);
    // 防止屏蔽程序抓取而返回403错误
    conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
​
    // 得到输入流
    InputStream input = conn.getInputStream();  
    // 获取自己数组
    byte[] getData = readInputStream(input);    
​
    // 文件保存位置
    File saveDir = new File(savePath);
    if(!saveDir.exists()){
        saveDir.mkdir();
    }
    File file = new File(saveDir+File.separator+fileName);    
    FileOutputStream output = new FileOutputStream(file);     
    output.write(getData); 
    if(output!=null){
        output.close();  
    }
    if(input!=null){
        input.close();
    }
    System.out.println("download success!!");
}
​
public static  byte[] readInputStream(InputStream inputStream) throws IOException {  
    byte[] buffer = new byte[10240];  
    int len = 0;  
    ByteArrayOutputStream bos = new ByteArrayOutputStream();  
    while((len = inputStream.read(buffer)) != -1) {  
        bos.write(buffer, 0, len);  
    }  
    bos.close();  
    return bos.toByteArray();  
}

 

转载自:java下载网络文件的N种方式 - Jaywen - 博客园 (cnblogs.com)

posted @ 2021-12-10 10:19  散人长情  阅读(1045)  评论(0编辑  收藏  举报