在java中编写和读取文件会产生意外结果

时间:2015-01-12 05:56:01

标签: java apache-commons

请我对以下代码有疑问

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 个答案:

答案 0 :(得分: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Ë