На моем 64-битном компьютере с Windows 7, использующим NTFS и Java 7, единственное, что надежно работало для меня, это
boolean canDelete = file.renameTo(file)
Это удивительно просто и работает также для папок, в которых "где-то ниже" находится "открытый" или "заблокированный" файл.
Другие вещи, которые я пробовал и производил ложные срабатывания: получить FileLock, File # canWrite, File # setLastModified ("touch")