在下载文件之前检查文件是否存在

6
我正在使用下载管理器来下载文件。以下是下载文件的代码。
   private String DownloadData(Uri uri, View v, String textview) {

    long downloadReference;

    // Create request for android download manager
    dm = (DownloadManager)getContext().getSystemService(DOWNLOAD_SERVICE);
    DownloadManager.Request request = new DownloadManager.Request(uri);

    //Setting title of request
    request.setTitle(textview);

    //Setting description of request
    request.setDescription("Android Data download using DownloadManager.");

    //Set the local destination for the downloaded file to a path within the application's external files directory
    request.setDestinationInExternalFilesDir(getContext(), DIRECTORY_DOWNLOADS, File.separator + "Dr_Israr_Ahmad" + File.separator + textview+".mp3");

    //Enqueue download and save into referenceId
    downloadReference = dm.enqueue(request);

    return null
}

上述代码运行良好。现在我需要做的是,如果文件已经下载,则希望我的应用程序播放它。所使用的代码如下:
   String path = String.valueOf(getContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS+ File.separator+"Dr_Israr_Ahmad" + File.separator +filename+".mp3"));

                File file = new File(path);

                if(file.exists()){
                    Toast.makeText(getContext(),path+ "/n exists", Toast.LENGTH_SHORT).show();
                } else if (!file.exists()) {
                    Toast.makeText(getContext(), "Downloading", Toast.LENGTH_SHORT).show();
                   Uri uri = Uri.parse("http://www.digitalsguide.com/mobile-apps/dr-israr-ahmad/audios/"+filename+".mp3");
                   String filepath = DownloadData(uri,view,filename);
                }

但问题是,即使文件不存在,条件也为真。我的路径有问题吗?请帮我解决。

4个回答

12

我以前注意到exists的一些奇怪行为,并将其更改为isFile

File file = new File(path);
if (file.isFile()) {
    Toast.makeText(getContext(), path + "/n exists", Toast.LENGTH_SHORT).show();
} else {
    Toast.makeText(getContext(), "Downloading", Toast.LENGTH_SHORT).show();
    // ...
}

我认为每次执行new File()时,移动设备都会创建一个目录。检查一下。


这个解决方案是用来检查本地文件是否存在,但如果您需要检查远程文件是否存在呢? - CanCoder
1
@leeCoder - 然后你可以提出一个新的问题,或者搜索已经回答过的问题。因为这不是 >这个< 问题所涉及的内容... - Stephen C

1

因为getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)返回的是/storage/emulated/0/Android/data/<PACKAGE_ID>/files/Download,而不是当我们设置Environment.DIRECTORY_DOWNLOADSDownloadManager下载文件的文件夹。


0

尝试将您的路径放置如下所示的示例中:

File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+ "/" +filename);

这里的文件名是example.pdf,您可以检查文件是否存在。


-1

.getExternalFilesDir(yourFilePath) 会在你的代码中创建一个目录,所以可以像这样使用它。

String path = String.valueOf(getContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)+ File.separator+"Dr_Israr_Ahmad" + File.separator +filename+".mp3");

这并没有回答所问的问题。 - Stephen C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接