2009-05-13 8 views
1

javaでファイルを安全に削除するにはどうすればよいですか?私はjavafaq.nuでコードを試しましたが、問題は、実際にはthis bugのためにマップされていたWindows上のファイルを削除できないということです。Javaでファイルを安全に削除する方法

その後、私はWindows上でsysinternals sdeleteを使用してみましたが、初めて使用するときは使用法をクリックする必要があります。

+1

sdeleteのレジストリエントリHKEY_CURRENT_USER \ SOFTWARE \ Sysinternalsの\ SDelete \ ** EulaAcceptedを設定することで自動化することができる "使用契約がクリック" **に1(REG_DWORD) – Myobis

答えて

4

NTFSのようなジャーナリングファイルシステムでは、ドライブ上の空き領域をすべて拭き取ることなく、実際には単一のファイルを安全に消去する方法はありません。問題は、おそらくランダムなデータで上書きされた新しいブロックが、古いものと同じ場所にディスク上にあることが保証されていないことです。

sdeleteのようなユーティリティはあなたのために働くかもしれませんが、単純にその実行ファイルを何もしてその防御方法を妨害しないユーティリティに置き換えることができます。

データを安全に保つためには、ドライブを完全に暗号化するしかありません。

0

ファイル上でdeleteOnExit()を実行することはありますか?

+1

ファイルがマップされていると助けになりません.JVMプロセスが終了した後で削除する必要があります。 –

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(); 
    } 
} 
関連する問題