目前,我目前正在尝试从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);
我尝试进行文件检查,查看文件是否存在,但是即使文件已经下载并放在正确的位置,我也总是得到文件不存在。有人可以帮我吗?
答案 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/
中。结果,您的条件总是失败。