Как сказать, почему удаление файла не удается в Java?

Важным советом, если строка, которая имеет chunked, должна поддерживать все символы Unicode.

Если строка поддерживает международные символы, такие как

37
задан Greg Mattes 13 November 2009 в 14:51
поделиться

4 ответа

В Java 6, к сожалению, нет способа определить, почему файл не может быть удален. В Java 7 вы можете вместо этого использовать java.nio.file.Path # delete () , что даст вам подробную причину сбоя, если файл или каталог не может быть удален.

Примечание этот file.list () может возвращать записи для каталогов, которые можно удалить. В документации API для удаления говорится, что могут быть удалены только пустые каталоги, но каталог считается пустым, если содержащиеся файлы являются, например, файлами метаданных ОС.

24
ответ дан 27 November 2019 в 04:41
поделиться

Хм, лучшее, что я мог сделать:

public String getReasonForFileDeletionFailureInPlainEnglish(File file) {
    try {
        if (!file.exists())
            return "It doesn't exist in the first place.";
        else if (file.isDirectory() && file.list().length > 0)
            return "It's a directory and it's not empty.";
        else
            return "Somebody else has it open, we don't have write permissions, or somebody stole my disk.";
    } catch (SecurityException e) {
        return "We're sandboxed and don't have filesystem access.";
    }
}
21
ответ дан 27 November 2019 в 04:41
поделиться

Удаление может завершиться неудачно по одной или нескольким причинам:

  1. Файл не существует (используйте Файл № существует () для проверки).
  2. Файл заблокирован (потому что он открывается другим приложением (или вашим собственным кодом!).
  3. Вы не авторизованы (но это вызвало бы исключение SecurityException, а не вернуло false!).

Поэтому всякий раз, когда удаление не удается, выполните Файл № существует () , чтобы проверить, вызвано ли это 1) или 2).

Резюме:

if (!file.delete()) {
    String message = file.exists() ? "is in use by another app" : "does not exist";
    throw new IOException("Cannot delete file, because file " + message + ".");
}
4
ответ дан 27 November 2019 в 04:41
поделиться

Как указано в File.delete ()

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

-1
ответ дан 27 November 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: