等待下载的文件完成,而不仅仅是File.exists()

时间:2014-07-24 09:53:27

标签: java android

我正在从网上下载文件,然后使用BufferedReader读取它。目前我使用DownloadManager下载文件,然后输入以下代码:

while (latestNumbersFile.exists() != true) {
            System.out.println("WAITING...");
        }

        try {
            Thread.sleep(5000);
        } catch (InterruptedException ignored) {
        }

因此,在文件下载完成之前,以下任何代码都不会执行。这有效,但接缝对我来说真的很脏。 如果我删除Thread.sleep(5000);它的接缝文件确实存在但尚未准备好被读取。

必须有一种更好的方法来识别文件何时不仅存在,而且实际上已经完成并准备好在其上执行某些操作。

有什么想法? (对不起,如果这是一个noobie问题,我已经搜索了高低的答案)

2 个答案:

答案 0 :(得分:4)

从下载完成时Android developers开始,DownloadManager广播一个意图。您可以捕获此“事件”并像处理它一样处理:

BroadcastReceiver receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {


             /** Do your coding here **/       

            }
        }
    };

    registerReceiver(receiver, new IntentFilter(
            DownloadManager.ACTION_DOWNLOAD_COMPLETE));

来自:Vogella

请告诉我这是否对您有所帮助,如果不能,我们可以尝试其他任何事情:)

答案 1 :(得分:0)

不建议忙碌等待。您最好使用DownloadManager。

来自Download a file with Android, and showing the progress in a ProgressDialog

  

使用DownloadManager类(仅限GingerBread和更新版本)   这种方法非常棒,你不必担心手动下载文件,处理线程,流等.GingerBread带来了一个新功能:DownloadManager,它允许你轻松下载文件并将辛苦的工作委托给系统。