2016-10-24 7 views
0

Я хочу проверить, существует ли файл в папке «Загрузить» на Android. Я использую менеджер загрузки Android для загрузки файла. Там if раздел не работает. Если файл уже существует (пример: имя файла - songname.mp3), при загрузке того же файла второй раз он загружает файл как songname1.mp3. Я пробовал код ниже. Я хочу показать сообщение, если файл уже существует.Проверьте, существует ли файл Android. Не работает

Пожалуйста, помогите мне исправить эту проблему.

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); 
    } 
} 
+0

Вы добавили 'хранилище для чтения '? – Sanjeet

+0

@ sanjeetkumarSingh- Да. Уже добавлены следующие разрешения <использует-разрешение Android: имя = "android.permission.INTERNET"> <использует-разрешение андроида: имя = "android.permission.WRITE_EXTERNAL_STORAGE" /> < use-permission android: name = "android.permission.READ_EXTERNAL_STORAGE" /> venura

ответ

1

Вы, вероятно, следует попытаться изменить:

File applictionFile = new File(Environment. 
     getExternalStoragePublicDirectory(Environment 
       .DIRECTORY_DOWNLOADS)+ "/"+"mysongs.mp3"); 

к:

File applictionFile = new File(Environment. 
     getExternalStoragePublicDirectory(Environment 
       .DIRECTORY_DOWNLOADS).getAbsolutePath() + "/" + "mysongs.mp3"); 
+0

Вам даже не нужно«/»посередине. Замените его на «,», и имя файла будет вторым параметром. Точно так, как показывает сообщение OP в инструкции 'else' –

+0

Да, вы можете определенно сделать это, но моя цель - показать минимальные изменения, сосредоточенные на реальной проблеме, чтобы избежать каких-либо заблуждений читателю. –

+0

Конечно, я понимаю. Я просто информировал ОП. Не хочу публиковать новый ответ для этого незначительного изменения, так как я видел ваш ответ :) –

1

, на котором тестирования устройства вы тестирования приложений? это выше 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(); 
} 
+0

Большое спасибо @Radhey – venura

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(); 
    } 
+0

Большое спасибо @Emdad Hossain – venura

1

Простым способом

File f = new File(filePathString); 
if(f.exists() && !f.isDirectory()) { 
    // do your code stuff 
} 
+0

Спасибо Aditya – venura

Смежные вопросы