【问题标题】:Waiting untill a downloaded file is complete, not just File.exists()等到下载的文件完成,而不仅仅是 File.exists()
【发布时间】:2014-07-24 18:02:03
【问题描述】:

我正在从网上下载一个文件,然后使用 BufferedReader 读取它。目前我使用 DownloadManager 下载文件然后有这个代码:

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

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

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

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

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

【问题讨论】:

    标签: java android


    【解决方案1】:

    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

    如果这对您有帮助,请告诉我,如果没有,我们可以尝试其他方法:)

    【讨论】:

    • 谢谢Sherekan,给我一点,我会告诉你的
    • @Ash 如果这对您有帮助,请将答案标记为已接受,以便寻找类似内容的每个人都可以依赖这篇文章。
    • 对不起,伙计。我正在尝试理解您的代码。 (这仍然是个菜鸟)但是睡眠和工作阻碍了。一旦我理解了您的代码并使其正常工作(或不工作),我会打勾或寻求更多帮助...
    • 好吧,别担心,我们都知道你在说什么“睡觉”的东西 :)
    • registerReceiver 必须在 Activity 中调用,确保您使用的类扩展自 Activity。还要确保您没有在 new BroadcastReceiver { ... } 的大括号内调用 registerReceiver。让我知道它是否有效
    【解决方案2】:

    不建议忙于等待。你最好使用 DownloadManager。

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

    使用 DownloadManager 类(仅限 GingerBread 和更新版本) 这个方法很棒,你不用担心手动下载文件、处理线程、流等。GingerBread 带来了一个新功能:DownloadManager,它可以让你轻松下载文件并将繁重的工作委托给系统。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 2011-04-08
      • 2014-08-02
      • 2021-10-22
      • 1970-01-01
      • 2021-11-22
      • 2020-09-30
      相关资源
      最近更新 更多