我如何检查我可以用Java删除文件?
例如,如果在另一个程序中打开文件test.txt
,则无法将其删除。我必须在实际删除之前知道它,所以我不能这样做:
if (!file.delete()) { ... }
并且srcFile.canWrite()
也无效。
答案 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。