以下代码创建了一个文件,但是它无法打开,并且它创建的文件大小与我要下载的文件的大小没有远程对应。 (以whatsapp更新程序链接为例):
private static boolean download(){
try {
String outfile = "/sdcard/whatsapp.apk";
URL download = new URL("https://www.whatsapp.com/android/current/WhatsApp.apk");
ReadableByteChannel rbc = Channels.newChannel(download.openStream());
FileOutputStream fileOut = new FileOutputStream(outfile);
fileOut.getChannel().transferFrom(rbc, 0, 1 << 24);
fileOut.close();
rbc.close();
return true;
} catch (IOException ioe){
return false;
}
}
编辑:这是我完整代码的简化版本(完整代码允许主线程执行网络操作,并信任所有证书),还更改了问题中的代码。
测试表明没有抛出IOException,并且代码完整无误。那么,为什么下载的文件不可用?
答案 0 :(得分:1)
来自Javadoc:
如果源通道的剩余剩余字节数少于计数字节,或者源通道是非阻塞的并且其输入缓冲区中立即可用的字节数少于计数字节,则将传输少于请求的字节数。
这意味着不能保证一次将保存整个文件。您应该将此调用置于一个循环中,一旦整个下载完成,该循环就会中断。