Проверьте, существует ли файл уже Android не работает

#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