java nio 下载网页_java 从网上下载文件的几种方式 (转)

本文介绍了使用Java NIO从网上下载文件的两种方法,包括利用NIO和NIO2的实现细节,同时提供了传统的IO Stream和Apache Commons IO库的下载文件方式作为对比。
摘要由CSDN通过智能技术生成

package com.github.pandafang.tool;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.URL;

import java.nio.channels.Channels;

import java.nio.channels.FileChannel;

import java.nio.channels.ReadableByteChannel;

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.Paths;

import java.nio.file.StandardCopyOption;

import org.apache.commons.io.FileUtils;

/**

* 文件工具类

* @author panda fang

* @date 2017-08-26

* @version 1.0

*/

public class FileTool {

/**

* 使用传统io stream 下载文件

* @param url

* @param saveDir

* @param fileName

*/

public static void download(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();

}

}

}

}

/**

* 利用 commonio 库下载文件,依赖Apache Common IO ,官网 https://commons.apache.org/proper/commons-io/

* @param url

* @param saveDir

* @param fileName

*/

public static void downloadByApacheCommonIO(String url, String saveDir, String fileName) {

try {

FileUtils.copyURLToFile(new URL(url), new File(saveDir, fileName));

} catch (IOException e) {

e.printStackTrace();

}

}

/**

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

* @param url

* @param saveDir

* @param fileName

*/

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();

}

}

}

}

/**

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

* @param url

* @param saveDir

* @param fileName

*/

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();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值