如何安全地删除java中的文件

如何安全删除java中的文件? 我在javafaq.nu上尝试了代码,但问题是由于这个bug,你一旦映射了它就无法在windows上删除它。

然后我尝试在Windows上使用sysinternals sdelete ,但是第一次使用时我必须单击一个使用协议,我想避免使用它。

在像NTFS这样的日志文件系统上,实际上没有办法在不擦除驱动器上的所有可用空间的情况下安全地擦除单个文件。 问题是新的块(你可能用随机数据覆盖)并不能保证与旧的块在磁盘上相同的位置。

像sdelete这样的实用程序可能对你有用,但是可以简单地将那个可执行文件替换为不会阻止这种防御方法的可执行文件。

为了确保您的数据安全,您唯一真正的解决方案是完全加密驱动器。

我编码并尝试了这个function,它似乎工作:

public static void secureDelete(File file) throws IOException { if (file.exists()) { long length = file.length(); SecureRandom random = new SecureRandom(); RandomAccessFile raf = new RandomAccessFile(file, "rws"); raf.seek(0); raf.getFilePointer(); byte[] data = new byte[64]; int pos = 0; while (pos < length) { random.nextBytes(data); raf.write(data); pos += data.length; } raf.close(); file.delete(); } } 

也许对文件执行deleteOnExit()?