Java 使用ApachePOI为带有hadoop文件系统api的xlsx设置密码

Java 使用ApachePOI为带有hadoop文件系统api的xlsx设置密码,java,apache-spark,hadoop,apache-poi,Java,Apache Spark,Hadoop,Apache Poi,使用hadoop文件系统api和poi来设置xlsx文件的密码,有什么解决方法吗?下面的代码在windows文件系统中工作,但如何将其移植到hadoop文件系统api中?我确实尝试过将outputstream转换为hadoop流,但没有成功 公共类加密测试{ 公共静态void main(字符串[]args)引发异常{ hssf(); 加密XSSF(); for(最终字符串文件:新字符串[]{“test.xls”,“test.xlsx”}){ try(工作簿wb=WorkbookFactory.c

使用hadoop文件系统api和poi来设置xlsx文件的密码,有什么解决方法吗?下面的代码在windows文件系统中工作,但如何将其移植到hadoop文件系统api中?我确实尝试过将outputstream转换为hadoop流,但没有成功

公共类加密测试{
公共静态void main(字符串[]args)引发异常{
hssf();
加密XSSF();
for(最终字符串文件:新字符串[]{“test.xls”,“test.xlsx”}){
try(工作簿wb=WorkbookFactory.create(新文件),“传递”)){
System.out.println(wb.getSheetAt(0).getRow(0).getCell(0).getStringCellValue());
}
}
}
public static void encryptHSSF()引发IOException、EncryptedDocumentException、InvalidFormatException{
生成文件(“test.xls”);
try(HSSFWorkbook hwb=(HSSFWorkbook)WorkbookFactory.create(新文件(“test.xls”)){
Biff8EncryptionKey.setCurrentUserPassword(“pass”);
hwb.write();
}
}
public static void encryptXSSF()引发IOException、GeneralSecurityException{
generateFile(“test.xlsx”);
try(POIFSFileSystem fs=new POIFSFileSystem()){
EncryptionInfo=新的EncryptionInfo(EncryptionMode.agile);
Encryptor enc=info.getEncryptor();
enc.confirmPassword(“pass”);
try(OutputStream os=enc.getDataStream(fs)){
try(InputStream=newfileinputstream(“test.xlsx”)){
IOUtils.copy(is,os);
}
}
try(FileOutputStream fos=newfileoutputstream(“test.xlsx”)){
fs.可写文件系统(fos);
}
}
}
公共静态void generateFile(最终字符串文件名)引发IOException{
尝试(工作簿wb=filename.endsWith(“x”)?新建XSSF工作簿():新建HSSFWorkbook()){
wb.createSheet(“测试”).createRow(0).createCell(0).setCellValue(“测试”);
try(FileOutputStream fos=newfileoutputstream(文件名)){
wb.write(fos);
}
}
}
}
共享编辑