Как проверить, можно ли удалить файл? - PullRequest
1 голос
/ 22 февраля 2011

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

Например, если файл test.txt открыт в другой программе, я не могу его удалить. И я должен знать это до фактического удаления, поэтому я не могу сделать это:

if (!file.delete()) { ... }

И srcFile.canWrite() тоже не работает.

Ответы [ 4 ]

5 голосов
/ 02 июня 2015

На моем 64-битном компьютере с Windows 7, использующим NTFS и Java 7, единственное, что надежно работало для меня, это

boolean canDelete = file.renameTo(file)

Это удивительно просто и работает также для папок, в которых "где-то ниже" находится "открытый" или "заблокированный" файл.

Другие вещи, которые я пробовал и производил ложные срабатывания: получить FileLock, File # canWrite, File # setLastModified ("touch")

3 голосов
/ 22 февраля 2011

Открыть файл с помощью блокировки записи.

Смотрите здесь http://download.oracle.com/javase/6/docs/api/java/nio/channels/FileLock.html

FileChannel channel = new RandomAccessFile("C:\\foo", "rw").getChannel();

// Try acquiring the lock without blocking. This method returns
// null or throws an exception if the file is already locked.
FileLock lock = channel.tryLock();

// ...  

// release it
lock.release();
3 голосов
/ 22 февраля 2011

В Unix вам нужно разрешение на запись в родительский каталог, чтобы удалить файл.

В Windows разрешения могут быть гораздо более детализированными, но, как я полагаю, доступ к записи в каталог мог бы охватить и большинство случаев. Кроме того, вы должны попытаться установить блокировку записи для файла, когда находитесь под Windows.

1 голос
/ 22 февраля 2011

Возможно, вы захотите посмотреть FileLock . Существует метод FileChannel.tryLock () , который возвращает ноль, если вы не можете получить блокировку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...