2015-01-12 48 views
0

請我有下面的代碼寫作和閱讀文件中的Java提供了意想不到的效果

public String encrypt(String fileToEncrypt) throws Exception{ 
    _cipher.init(Cipher.ENCRYPT_MODE, _keyPair.getPublic()); 
    File inputfile = new File(fileToEncrypt); 
    File outputfile = new File("C:/SECUREFILE".concat("/").concat(FilenameUtils.getName(fileToEncrypt))); 
    FileInputStream inputstream = new FileInputStream(inputfile); 
    FileOutputStream outputStream = new FileOutputStream(outputfile, false); 
    CipherOutputStream cos = new CipherOutputStream(outputStream, _cipher); 
    IOUtils.copy(inputstream, cos); 
    IOUtils.closeQuietly(inputstream); 
    IOUtils.closeQuietly(cos); 
    return outputfile.getPath(); 
} 

的問題是,寫入到磁盤生成的文件始終是0KB一個問題。請問我做錯了什麼

+1

您是否錯過輸出流的flush()和close()? – StanislavL

+0

副本應該做一個刷新。 close()不會傷害,儘管操作系統應該照顧這一點。 – laune

回答

0

使用IOUtils.closeQuietly(inputstream)和IOUtils.closeQuietly(cos);關閉流,它應該工作 下面這段代碼對我的作品

public static void main(String[] args) throws Exception { 

    encrypt(new Scanner(System.in).next()); 
} 
public static String encrypt(String fileToEncrypt) throws Exception{ 
    KeyGenerator kgen = KeyGenerator.getInstance("AES"); 
    kgen.init(128); 
    SecretKey _keyPair = kgen.generateKey(); 

    Cipher _cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
    _cipher.init(Cipher.ENCRYPT_MODE, _keyPair); 

    File inputfile = new File(fileToEncrypt); 
    File outputfile = new File("D:/SECUREFILE".concat("/").concat(FilenameUtils.getName(fileToEncrypt))); 
    FileInputStream inputstream = new FileInputStream(inputfile); 
    FileOutputStream outputStream = new FileOutputStream(outputfile, false); 
    CipherOutputStream cos = new CipherOutputStream(outputStream, _cipher); 
    IOUtils.copy(inputstream, cos); 
    IOUtils.closeQuietly(inputstream); 
    IOUtils.closeQuietly(cos); 
    return outputfile.getPath(); 
} 

輸入文件內容:dfsdafdsfasdfsadfs

輸出文件的內容:-X‰8q'4ÆZ€'®‡tÈérë/ ű¤®v'rË

+0

試過它沒有工作。寫入磁盤的所有文件的大小仍爲0KB –

+0

@PeterEdike您可以添加實例化和配置密碼的那一段代碼。也是密鑰對 – shikjohari

相關問題