加密讀取寫入

package testExcel;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.security.GeneralSecurityException;

import org.apache.poi.poifs.crypt.Decryptor;

import org.apache.poi.poifs.crypt.EncryptionInfo;

import org.apache.poi.poifs.crypt.EncryptionMode;

import org.apache.poi.poifs.crypt.Encryptor;

import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class testExcel {

public static void main(String arg[]) throws IOException, GeneralSecurityException {

//讀取加密的 Excel

InputStream inp = new FileInputStream("D:/test.xlsx");

POIFSFileSystem pfs = new POIFSFileSystem(inp);

inp.close();

EncryptionInfo encInfo = new EncryptionInfo(pfs);

Decryptor decryptor = Decryptor.getInstance(encInfo);

decryptor.verifyPassword("12345");

XSSFWorkbook workbook = new XSSFWorkbook(decryptor.getDataStream(pfs));

//讀取欄位

Sheet sheet = workbook.getSheetAt(0);

Row row = sheet.getRow(0);

Cell cell = row.getCell(0);

System.out.println(cell.getStringCellValue());

//寫入欄位

row = sheet.createRow(1);

cell = row.createCell(1);

cell.setCellValue("123456789");

//重新加密

POIFSFileSystem fileSystem = new POIFSFileSystem();

EncryptionInfo info = new EncryptionInfo(EncryptionMode.standard);

Encryptor enc = info.getEncryptor();

enc.confirmPassword("12345");

OutputStream encryptedDS = enc.getDataStream(fileSystem);

workbook.write(encryptedDS);

FileOutputStream fos = new FileOutputStream("D:/test.xlsx");

fileSystem.writeFilesystem(fos);

fos.close();

workbook.close();

}

}