我的 Java 代码下载了一个文件,但它的大小错误

以下代码创建了一个文件,但它无法打开,并且它创建的文件大小与我尝试下载的文件的大小不远程对应。(以whatsapp updater 链接为例):


 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 没有被抛出,并且代码完成没有错误。那么,为什么下载的文件无法使用?


蝴蝶刀刀
浏览 410回答 1
1回答

holdtom

从Javadoc:如果源通道剩余的字节数少于计数,或者源通道是非阻塞的并且其输入缓冲区中立即可用的字节数少于计数,则将传输少于请求的字节数。这意味着不能保证一次保存整个文件。您应该将此调用置于一个循环中,一旦整个下载完成,该循环就会中断。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java