非阻塞I/O下载(可以跨服务器的下载)

        前些日子在公司做了一些上传下载的功能,这个非常好使就分享一下。然而一个观众都没有,那就当成自己的日记吧:

/**

* 非阻塞I/O下载

*

* @return boolean 是否成功

* @throws ParseException

*/

public boolean nioDownload(String preparePath, String realFileName, String saveName)

throws ParseException {

// httpUrl这个是下载地址

String httpUrl = preparePath;

String ext = realFileName.substring(realFileName.lastIndexOf("."), realFileName.length());

String workDirectory = getSystemRealDirectory() + getSystemWorkDirectory() + Global.getConfig("htword.accDir")

+ "/" + saveName + ext;

System.out.println("目标文件夹:" + workDirectory);

boolean flag = false;

// 下载网络文件

// Long startTime = System.nanoTime();

ReadableByteChannel rbc = null;

FileOutputStream fos = null;

try {

URL website = new URL(httpUrl);

System.out.println("下载地址:" + httpUrl);

rbc = Channels.newChannel(website.openStream());

fos = new FileOutputStream(workDirectory);//这个是最终下载到的位置

fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);

flag = true;

} catch (IOException e) {

flag = false;

e.printStackTrace();

} finally {

try {

if (fos != null) {

fos.close();

}

} catch (IOException e) {

e.printStackTrace();

}

try {

if (rbc != null) {

rbc.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

// Long elapsedTime = System.nanoTime() - startTime;

// if((elapsedTime / 1000000000.0)>3)

return flag;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,958评论 18 399
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,797评论 0 17
  • 一. Java基础部分.................................................
    wy_sure阅读 9,260评论 0 11
  • 一、流的概念和作用。 流是一种有顺序的,有起点和终点的字节集合,是对数据传输的总成或抽象。即数据在两设备之间的传输...
    布鲁斯不吐丝阅读 13,422评论 2 95
  • 1 参考 2 轴线中文乱码和正负号错误 3 基础画图 4 设置轴线名称 5 设置多条曲线
    gogoforit阅读 3,848评论 0 0