2010-11-18 1 views
1

ユーザパスワードに基づいてファイルを復号化するJavaクラスがあります。 私は、暗号化されたコンテンツを含むdemo.jarとファイルcontent.txtを持っています。プログラムは実行され、ユーザーのパスワードに基づいて、ファイルをcontent_recovered.txtというファイルに復号化します。AES java on usbドライブが動作しない

私のコンピュータでこれを行う限り、大きな効果があります。ファイルをフラッシュドライブに入れてそこから実行すると、動作しません。 content_recovered.txtファイルが作成されましたが空です!

誰かがフラッシュドライブからどのように動作させるかについてのアイデアはありますか?

答えて

0

私はこれがうまくいかないと思う唯一の理由は、USBのバッファーサイズがディスクよりも大きく、出力ストリームバッファを適切にフラッシュしていない(または入力ファイルを適切に閉じていない)ということです。

あなたがフラッシュすると閉じ書くとき、および読み取り時に開いている他のファイル参照がないことを確認していることを確認するためにあなたのIOコードを確認してください:

OutputSteam os = null; 

try { 
    os = new BufferedOutputStream(new FileOutputStream(folder,"content.txt")); 
    writeEncryptedFile(os); // do your file writing here 
} catch (Exception e) { 
    e.printStackTrace(); // whatever your error logging is here. 
} finally { 
    if (os != null) { 
     // MUST ALWAYS FLUSH BEFORE CLOSING OUTPUTSTREAM 
     try { os.flush(); } catch (Exception e) {} 
     try { os.close(); } catch (Exception e) {} 
    } 
} 

また - あなたの入力を閉じていることを確認してくださいfinallyブロックにもファイルがあります。これは多くの機会に私を捕まえました - それ以上はありません:)

+0

ファイルは適切に閉じられているので、バッファーサイズから来る可能性があります。 どうすれば修正できますか?バッファーサイズは私のコードなので同じです。 – user512684

+0

close()の前にflush()を呼び出し、バッファが問題にならないようにしてください。 – Chris

関連する問題