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)