如何在java中安全地删除文件?我在javafaq.nu尝试了代码,但问题是由于这个错误,一旦它被映射,你就不能真正删除 windows 上的文件。
然后我尝试在 Windows 上使用sysinternals sdelete,但你必须在第一次使用它时单击使用协议,这是我想避免的。
如何在java中安全地删除文件?我在javafaq.nu尝试了代码,但问题是由于这个错误,一旦它被映射,你就不能真正删除 windows 上的文件。
然后我尝试在 Windows 上使用sysinternals 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();
}
}
在像 NTFS 这样的日志文件系统上,实际上没有办法在不擦除驱动器上所有可用空间的情况下安全地擦除单个文件。问题是新块(您可能已经用随机数据覆盖)不能保证与旧块在磁盘上的相同位置。
像 sdelete 这样的实用程序可能对您有用,但您可以简单地将可执行文件替换为不会阻止该防御方法的可执行文件。
为了保证您的数据安全,您唯一真正的解决方案是完全加密驱动器。
也许对文件执行 deleteOnExit() ?