前些日子在公司做了一些上传下载的功能,这个非常好使就分享一下。然而一个观众都没有,那就当成自己的日记吧:
/**
* 非阻塞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;
}