Я использую это в приложении, где запись в файл невозможна.Данные всегда в потоках.Я получаю файл XLSX во входном потоке и хочу установить пароль и записать его в выходной поток.
public void encrptXslxFile(InputStream inStream, OutputStream outStream){
POIFSFileSystem fs = null;
EncryptionInfo info = null;
OutputStream fos;
OPCPackage opc = null;
try {
info = new EncryptionInfo(EncryptionMode.agile);
Encryptor enc = info.getEncryptor();
enc.confirmPassword("coffee");
//inStream = new FileInputStream("C:\\ProjectWork\\Community\\excelfile.xlsx");
fs = new POIFSFileSystem();
opc = OPCPackage.open(inStream); //from parameter
OutputStream os = enc.getDataStream(fs);
opc.save(os);
os.close();
//fos = new FileOutputStream("C:\\ProjectWork\\Community\\excelfilepwd.xlsx");
//fs.writeFilesystem(fos);
//fos.close();
fs.writeFilesystem(outStream); // from parameter
outStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
При чтении из файла и записи в файл он прекрасно шифруется.Но если я использую функцию, а затем получаю выходной поток, а затем пишу его, он создает файл с нулевым килобайтом.Это вообще возможно?
Я проверил код ниже, чтобы убедиться, что входной поток в порядке.
public void encrptXslxFile(InputStream inStream, OutputStream outStream){
try {
IOUtils.copy(inStream, outStream);
} catch (IOException e) {
e.printStackTrace();
}
}
Мне удалось записать выходной поток в файл.