#android
#Android
Вопрос:
Я хочу проверить, существует ли файл уже в папке загрузки в Android. Я использую Android Download Manager для загрузки файла. Там if
раздел не работает. Если файл уже существует (например, имя файла — songname.mp3), при загрузке того же файла во второй раз он загружает файл как songname1.mp3
. Я попробовал приведенный ниже код. Я хочу показать сообщение, если файл уже существует.
Пожалуйста, помогите мне исправить эту проблему.
public void DownloadChecker() {
File applictionFile = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS) "/" "mysongs.mp3");
if(applictionFile.exists()) {
Toast.makeText(getApplicationContext(), "File Already Exists",
Toast.LENGTH_LONG).show();
} else {
String servicestring = Context.DOWNLOAD_SERVICE;
DownloadManager downloadmanager;
downloadmanager = (DownloadManager) getSystemService(servicestring);
Uri uri = Uri.parse(DownloadUrl);
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setDestinationInExternalFilesDir(MainActivity.this,
Environment.DIRECTORY_DOWNLOADS,"mysongs.mp3");
Long reference = downloadmanager.enqueue(request);
}
}
Комментарии:
1. вы добавили
storage read permission
?2. @sanjeetkumarSingh- Да. Уже добавлены следующие разрешения <использует-permission android:name=»android.permission. ИНТЕРНЕТ» > </использует-разрешение> <использует-разрешение android:name=»android.permission. WRITE_EXTERNAL_STORAGE» /> <использует-разрешение android:name=»android.разрешение. READ_EXTERNAL_STORAGE» /> <использует-разрешение android:name=»android.разрешение. ACCESS_NETWORK_STATE» /> <использует-разрешение android:name=»android.разрешение. ACCESS_WIFI_STATE» />
Ответ №1:
изменить
if(applictionFile.exists()) {
Toast.makeText(getApplicationContext(), "File Already Exists",
Toast.LENGTH_LONG).show();
}
Для
if(applictionFile.canRead()) {
Toast.makeText(getApplicationContext(), "File Already Exists",
Toast.LENGTH_LONG).show();
}
или
if(applictionFile.isFile()) {
Toast.makeText(getApplicationContext(), "File Already Exists",
Toast.LENGTH_LONG).show();
}
Комментарии:
1. Большое вам спасибо @Emdad Hossain
Ответ №2:
Попробуйте простым способом
File f = new File(filePathString);
if(f.exists() amp;amp; !f.isDirectory()) {
// do your code stuff
}
Ответ №3:
Вероятно, вам следует попробовать изменить:
File applictionFile = new File(Environment.
getExternalStoragePublicDirectory(Environment
.DIRECTORY_DOWNLOADS) "/" "mysongs.mp3");
Для:
File applictionFile = new File(Environment.
getExternalStoragePublicDirectory(Environment
.DIRECTORY_DOWNLOADS).getAbsolutePath() "/" "mysongs.mp3");
Комментарии:
1. Вам даже не нужен «/» в середине. Замените его на «,» и вторым параметром будет имя файла. Точно так, как показано в сообщении OP в
else
инструкции2. Да, вы определенно можете это сделать, но моя цель — показать минимальные изменения, концентрируясь на реальной проблеме, просто чтобы избежать каких-либо заблуждений у читателя.
3. Конечно, я понимаю. Я просто сообщал OP. Не хотел публиковать новый ответ на это незначительное изменение, так как я увидел ваш ответ 🙂
Ответ №4:
на каком тестовом устройстве вы тестируете свое приложение? это выше api-23, тогда вам нужно будет установить разрешение во время выполнения! или попробуйте это
File extStore = Environment.getExternalStorageDirectory();
File myFile = new File(extStore.getAbsolutePath() "/mysongs.mp3");
if(myFile.exists()){
Toast.makeText(getApplicationContext(), "File Already Exists",
Toast.LENGTH_LONG).show();
}
Комментарии:
1. Большое вам спасибо @Radhey