В моем приложении после того, как пользователь нажимает кнопку, менеджер загрузок начинает загружать файл из Интернета и сохранять его на внутреннюю SD-карту, используя этот код:
void startDownload()
{
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).mkdirs();
download_req.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE)
.setAllowedOverRoaming(false)
.setTitle(PersianReshape.reshape("Downloading"))
.setDescription(PersianReshape.reshape("currently downloading the file..."))
.setDestinationInExternalPublicDir(Environment.getExternalStorageDirectory().getAbsolutePath() , packageId + ".sqlite");
download_ID = mgr.enqueue(download_req);
}
После загрузки я планирую проверять его существование каждый раз, когда приложение запускается с этим кодом:
String DatabaseAddress =
Environment.getExternalStorageDirectory().getAbsolutePath() +
"/ee.sqlite";
File file = new File(DatabaseAddress);
Log.d("PATH File: ", DatabaseAddress);
if (file.exists()){
Toast.makeText(getApplicationContext(), "found", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplicationContext(), "not found", Toast.LENGTH_SHORT).show();
}
Теперь, когда я запускаю этот код, он возвращает сообщение «не найдено», тогда как файл уже существует (я проверил его существование с помощью файлового менеджера).
устройство, на котором я тестирую, - это nexus 7, а путь, используемый для сохранения файла загрузки: /storage/emulated/0/ee.sqlite
ee.sqlite — это имя загруженного файла.
/storage/emulated/0/ — это путь по умолчанию, возвращаемый приложением
Разрешения, добавленные в манифест для этого кода:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
В: Почему file.exists() возвращает false при наличии файла?
ОБНОВЛЕНИЕ: КОГДА Я ИСПОЛЬЗУЮ HARDCODE
File temp = new File("/sdcard/storage/emulated/0/", "ee.sqlite");
это работает, но когда я использую Environment.getExternalStorageDirectory().getPath(), это не работает.
file.getAbsolutePath()
: они (файлы) могут быть в разных каталогах. Другая возможная причина - разрешения, но я не думаю, что это из-за разрешений. - person 18446744073709551615   schedule 18.11.2013Log.d("~~~", "----" + new File(file.getAbsolutePath()).exists())
должно печатать true, аLog.d("~~~", "----" + file.exists())
печатать false. Это было бы абсурдно, а также означало бы ошибку. - person 18446744073709551615   schedule 18.11.2013Log.d("~~~","path=["+path+"]");
- person 18446744073709551615   schedule 18.11.2013