Метод File.exists() всегда возвращает true, даже если файл не существует

Я пытаюсь обуздать повторяющиеся загрузки, проверяя, существует ли файл, который пользователь собирается загрузить, прежде чем я приступлю к его загрузке. Я использую метод File.exists() для проверки этого условия, но, похоже, он всегда возвращает true. Ниже мой код:

            File destination = new File(Environment.DIRECTORY_DOWNLOADS, "/" + playlistTitle + "/" + image.getImgTitle() + ".jpg");
            if (!destination.exists()) {
                downloadId = downloadImage(image.getImgURL(), image.getImgTitle(), playlistTitle);
                downloadIds.add(downloadId);
            }

Если я перейду непосредственно к этому пути к файлу до его создания, он кажется пустым, но приведенный выше код все равно возвращает true.


person Noel Omondi    schedule 14.04.2018    source источник
comment
Если вы создадите новый файл непосредственно перед проверкой его существования, он всегда будет существовать, верно?   -  person Shubham Srivastava    schedule 14.04.2018
comment
Кто создает новый файл?   -  person greenapps    schedule 14.04.2018


Ответы (2)


Вы можете проверить несколько вещей здесь

сначала, как и ожидалось, мы получаем разрешение на чтение и запись носителя.

и вы также пытаетесь использовать метод ниже для проверки, можно ли прочитать файл или нет

if (!file.canRead()) {
    return false;
}

если два выше не работают, используйте это.

if (!file.isFile()) {
     //file doesn't exist    
    }else{
    //file exists
}
person vikas kumar    schedule 14.04.2018

new File(Environment.DIRECTORY_DOWNLOADS, "/" + playlistTitle 

Это может привести только к пути, который невозможен.

Вместо этого вы должны использовать

new File( Environment.getExternalPublicDirectory( 
      Environment.DIRECTORY_DOWNLOADS),......
person greenapps    schedule 14.04.2018
comment
Я пробовал это, используя getExternalStoragePublicDirectory, он все еще не работает, всегда возвращает true - person Noel Omondi; 28.04.2018
comment
Довольно непонятно, где у вас проблемы. Если файл существует, то File.exists() вернет true. - person greenapps; 28.04.2018
comment
Итак, вот с чем я столкнулся, я хочу загрузить файл, но перед его загрузкой я хочу сначала проверить, был ли он загружен до использования File.exists(), если это возвращает false, тогда я продолжу и скачаю его, иначе, если это возвращает true, я сообщу пользователю, что файл существует, и открою его. Проблема в том, что независимо от того, существует файл или нет, он всегда возвращает false - person Noel Omondi; 28.04.2018
comment
new File(Environment.DIRECTORY_DOWNLOADS, "/" + playlistTitle... Это все еще неправильный код. Обновите свой пост с правильным кодом, пожалуйста. - person greenapps; 28.04.2018