题
我如何安全地在Java中删除文件?我试图在 javafaq.nu 的代码,但问题是你实际上并不能删除Windows上的文件一旦被映射由于这个bug 。
然后我试图只是使用 Sysinternals的sdelete 上的窗口,但你必须点击一个使用协议,你使用它,我想避免的第一次。
解决方案
在日志文件系统等NTFS有实际上没有办法安全地擦除一个文件,而不在驱动器上擦拭所有的自由空间。问题是,新的块(这你大概用随机数据覆盖)不能保证在磁盘上的旧的同一个地方。
像sdelete工具可能会为你工作,而是一个可以简单地替换可执行文件与一个没有任何阻挠辩护的那个方法。
为了让您的数据安全,你唯一真正的解决办法是完全加密驱动器。
其他提示
予编码,并试图此功能,并且它似乎工作:
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()?
不隶属于 StackOverflow