Java 从网上下载文件的几种方式实例代码详解

网友投稿 435 2023-04-13


Java 从网上下载文件的几种方式实例代码详解

废话不多说了,直接给大家贴代码了,具体代码如下所示;

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

* @vehttp://rsion 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();

}

}

}

下载一个百度logo 测试一下

public static void main(String[] args) {

FileTool.downloadByNIO2("http://baidu.com/img/bd_logo1.png", "/home/panda/picture", "baidu_logo.png");

System.out.println("done...");

}

总结

以上所述是给大家介绍的Java 从网上下载文件的几种方式实例代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java使用DFA算法实现过滤多家公司自定义敏感字功能详解
下一篇:浅谈vuex之mutation和action的基本使用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~