2010-11-18 36 views
1

我擁有基於用戶密碼解密文件的Java類。 我有一個demo.jar和一個包含加密內容的文件content.txt。該程序運行並根據用戶密碼將文件解密成一個名爲content_recovered.txt的文件。usb驅動器上的AES java無法正常工作

只要我在我的電腦上這樣做,它就很好。我把這些文件放在閃存驅動器上,然後從那裏運行,它不起作用。文件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 2010-11-18 21:13:55

+0

只需確保在close()之前調用flush()並且緩衝區不應該成爲問題。 – Chris 2011-02-25 21:48:18