Android档案存在()无法运作

时间:2018-06-23 20:22:51

标签: java android

目前,我目前正在尝试从Uri下载文件,但我想这样做,以便如果文件已下载,将无法再下载。因此,我决定使用file.exists()来做到这一点,但是现在file.exists()方法由于某种原因无法正常工作。

Uri uri = Uri.parse("http://kmmc.in/wp-content/uploads/2014/01/lesson2.pdf");

Uri path = Uri.parse("file:///storage/emulated/0/Download/");
String test = uri.getPath();
File file = new File(path.getPath());
File check = new File(path.getPath()+uri.getLastPathSegment());
if (!check.exists()||!check.isFile()) {
  DownloadManager.Request request = new DownloadManager.Request(uri);
  request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
  request.setDestinationInExternalPublicDir(String.valueOf(file), uri.getLastPathSegment());
  Long reference = downloadManager.enqueue(request);
}
Intent intent = new Intent(MainActivity.this,ViewActivity.class);
intent.putExtra("book",""+uri.getLastPathSegment()+"");
startActivity(intent);

我尝试进行文件检查,查看文件是否存在,但是即使文件已经下载并放在正确的位置,我也总是得到文件不存在。有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

if (!check.exists()||!check.isFile())-不好,因为从理论上讲,它可能会在名称为lessons2.pdf的文件夹上触发。因此,仅isFile()就足够了。

确保您拥有清单中的所有权限

android.permission.WRITE_EXTERNAL_STORAGE

,并且您还要求运行时具有读/写权限。

并通过以下方式访问下载文件夹

String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString();

因为它可能是模拟的/ 0 /下载的,或者可能是不同的,具体取决于手机是否在访客模式下使用。

和名称

String name = Uri.parse("http://kmmc.in/wp-content/uploads/2014/01/lesson2.pdf").getLastPathSegment();`

然后用

进行检查
File check = new File(path, name);

答案 1 :(得分:0)

而不是:

request.setDestinationInExternalPublicDir(String.valueOf(file), uri.getLastPathSegment());

使用:

 request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, uri
                    .getLastPathSegment());

原因:

setDestinationInExternalPublicDir期望dirType作为您的第一个参数:

但是将其设置为String.valueOf(file)时,它将文件存储在/storage/emulated/0/storage/emulated/0/Download/lesson2.pdf中,而不是storage/emulated/0/Download/中。结果,您的条件总是失败。