file.exists () возвращает false, когда файл существует - PullRequest
6 голосов
/ 25 марта 2011

В приложении для Android, над которым я работаю, пользователь должен иметь возможность создать новый файл CSV на SD-карте, названный по тексту, введенному в EditText.

Проблема в том, что после создания экземпляраФайл с использованием каталога и имени файла file.exists () возвращает false , даже если файл действительно существует в этом месте.Я перешел на SD-карту с помощью файлового браузера Android и через Проводник Windows, и файл действительно существует.

Это правильный способ проверить, существует ли файл, и если да, то чего мне не хватает, такчто он возвращает истину, когда существует?

String csvname = edittext.getText().toString() + ".csv";
File sdCard = Environment.getExternalStorageDirectory(); //path returns "/mnt/sdcard"
File dir = new File (sdCard.getAbsolutePath() + "/Android/data/" + getPackageName() + "/files/"); // path returns "/mnt/sdcard/Android/data/com.phx.license/files"
dir.mkdirs();
File file = new File(dir, csvname); //path returns "/mnt/sdcard/Android/data/com.phx.license/files/Test.csv"

if(!file.exists()) //WHY DOES IT SAY IT DOESN'T EXIST WHEN IT DOES?
{
    ...
}

Ответы [ 3 ]

6 голосов
/ 28 марта 2011

Если вы используете createNewFile, он создаст файл, только если он еще не существует.

Документация по файлам Java

public boolean createNewFile () throws IOException создает атомноновый, пустой файл, названный этим абстрактным путем, если и только если файл с таким именем еще не существует.Проверка существования файла и создание файла, если он не существует, - это отдельная операция, которая является атомарной по отношению ко всем другим действиям файловой системы, которые могут повлиять на файл.Примечание: этот метод не должен использоваться для блокировки файлов, поскольку полученный протокол не может работать надежно.Вместо этого следует использовать средство FileLock.

Возвращает: true, если указанный файл не существует и был успешно создан;false, если указанный файл уже существует. Выдает: IOException - Если произошла ошибка ввода-вывода. SecurityException - Если существует менеджер безопасности, и его метод SecurityManager.checkWrite (java.lang.String) запрещает доступ на запись в файл, так как: 1.2

4 голосов
/ 25 марта 2011

Создание нового файлового объекта, например, new File(dir, csvname); не создает новый файл в файловой системе.

Сначала вам нужно записать в него данные.

0 голосов
/ 03 октября 2017

У меня была точно такая же проблема, но с пряжей на hadoop, когда задание spark пыталось выполнить команду.

Это была проблема с правами доступа к файлу. Я решил проблему с помощью кода, как показано ниже, который находится в Scala. существуют и notExists оба возвращают ложь, что означает, что jvm не может определить, существует файл или нет.

import java.nio.file.Path
import java.nio.file.Paths

val path = Paths.get(fileLocation);
println(":"+ Files.exists(path)+ ":" + Files.notExists(path))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...