如何安全删除java中的文件?我尝试了javafaq.nu处的代码,但问题是,由于this bug而导致一旦映射后,您无法在Windows上删除该文件。
然后我尝试在Windows上使用sysinternals sdelete,但是第一次使用时我必须单击一个使用协议,我想避免使用它。
答案 0 :(得分:15)
我编码并尝试了这个功能,它似乎有效:
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();
}
}
答案 1 :(得分:6)
在像NTFS这样的日志文件系统上,实际上没有办法在不擦除驱动器上的所有可用空间的情况下安全地擦除单个文件。问题是新块(你可能用随机数据覆盖)不能保证在磁盘上和旧块一样。
像sdelete这样的实用程序可能对您有用,但是可以简单地将该可执行文件替换为不会阻止该防御方法的可执行文件。
为了确保您的数据安全,您唯一真正的解决方案是完全加密驱动器。
答案 2 :(得分:0)
也许对文件执行deleteOnExit()?