如何检查文件是否可以删除?

时间:2011-02-22 12:22:07

标签: java io

我如何检查我可以用Java删除文件?

例如,如果在另一个程序中打开文件test.txt,则无法将其删除。我必须在实际删除之前知道它,所以我不能这样做:

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

并且srcFile.canWrite()也无效。

4 个答案:

答案 0 :(得分:5)

在使用NTFS和Java 7的Windows 7 64位盒子上,唯一对我有用的东西是

boolean canDelete = file.renameTo(file)

这非常简单,也适用于文件夹,它们位于"以下某处" "开放"或者"锁定"文件。

我尝试并制作误报的其他内容:获取FileLock,File#canWrite,File#setLastModified(" touch")

答案 1 :(得分:3)

使用Write Lock打开文件。

请参阅此处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();

答案 2 :(得分:3)

在Unix下,您需要对父目录具有写入权限才能删除文件。

在Windows下,权限可以更细粒度,但我相信,对目录的写访问也会捕获大多数情况。另外,在windows下,你应该尝试对文件进行写锁定。

答案 3 :(得分:1)

您可能需要查看FileLock。如果无法获得锁定,则会有FileChannel.tryLock()方法返回null。