0

こんにちはガイズ アプリケーションでファイルを暗号化する方法があります。ファイルを暗号化し、ソースを削除したかったのですが、このように試してみましたが、うまくいきません.. ?

 public static void encrypt(String password, InputStream is, OutputStream os,String DelFile) throws Exception {

SecretKeySpec keySpec = new SecretKeySpec(password(password), "TripleDES");
Cipher cipher = Cipher.getInstance("TripleDES");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] buf = new byte[8096];
os = new CipherOutputStream(os, cipher);
int numRead = 0;
while ((numRead = is.read(buf)) >= 0) {
    os.write(buf, 0, numRead);
}
os.close();

// file deleting part...
File f = new File(DelFile);
f.delete();}

これf.delete();はファイルを削除する必要がありますか? 私は正しいですか?しかし、それはうまくいきません, アドバイスをお願いします, ありがとう.

4

2 に答える 2

2

そのファイルに対して開いている入力ストリームがあるか、完全なファイル名が (パスとともに) 指定されていません。これが、削除しない実際の理由を見つけるのに のdelete()メソッドFileがあまり役に立たない理由です。そのドキュメントを見ると

この抽象パス名が示すファイルまたはディレクトリを削除します。このパス名がディレクトリを表す場合、ディレクトリを削除するには、そのディレクトリを空にする必要があります。Files クラスでは、ファイルを削除できない場合に IOException をスローする delete メソッドが定義されていることに注意してください。これは、エラーの報告や、ファイルを削除できない理由の診断に役立ちます。

そこで、根本的な原因を見つけるのに役立つアドバイスを以下に示します。削除にはFiles.delete()メソッドを使用します。

スロー:

NoSuchFileException - ファイルが存在しない場合 (オプションの特定の例外)

DirectoryNotEmptyException - ファイルがディレクトリであり、ディレクトリが空ではないために他の方法で削除できなかった場合 (オプションの特定の例外)

IOException - 入出力エラーが発生した場合

SecurityException - デフォルトのプロバイダで、セキュリティマネージャがインストールされている場合、 SecurityManager.checkDelete(String) メソッドが呼び出されて、ファイルへの削除アクセスがチェックされます

スローされた例外を確認すると、根本的な原因が何であるかを理解できます。

于 2013-10-14T12:33:54.150 に答える
0

管理者権限?例外が発生していますか?なら捕まえろ。

try {
Files.delete(path);
} catch (NoSuchFileException x) {
System.err.format("%s: no such" + " file or directory%n", path);
} catch (DirectoryNotEmptyException x) {
System.err.format("%s not empty%n", path);
} catch (IOException x) {
// File permission problems are caught here.
System.err.println(x);
}        
于 2013-10-14T12:32:26.553 に答える