gpt4 book ai didi

java - zip4j,从输入流中提取受密码保护的文件(blob 输入流,它是一个 zip 文件)

转载 作者:行者123 更新时间:2023-12-05 06:41:51 25 4
gpt4 key购买 nike

我有一个数据库,其中包含 blob 和该数据库中受密码保护的 zip,使用我传统上看到的标准文件对象方法

        File zipFile = new File("C:\\file.zip");        
net.lingala.zip4j.core.ZipFile table = new net.lingala.zip4j.core.ZipFile(zipFile);
if (table.isEncrypted())
table.setPassword(password);

net.lingala.zip4j.model.FileHeader entry = table.getFileHeader("file_inside_the_zip.txt");
return table.getInputStream(entry); //Decrypted inputsteam!

我的问题是,我如何在不使用临时文件的情况下实现这样的东西,并且纯粹单独获取 blob 的输入流,到目前为止我有这样的东西

InputStream zipStream = getFileFromDataBase("stuff.zip");
//This point forward I have to save zipStream as a temporary file and use the traditional code above

最佳答案

在 Hadoop 文件系统 (HDFS) 中处理受密码保护的压缩文件时,我遇到了同样的问题。 HDFS 不知道文件对象。

这就是我使用 zip4j 的方法:

        Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path hdfsReadPath = new Path(zipFilePath); // like "hdfs://master/dir/sub/data/the.zip"

FSDataInputStream inStream = fs.open(hdfsReadPath);
ZipInputStream zipInputStream = new ZipInputStream(inStream, passWord.toCharArray());

LocalFileHeader zipEntry = null;

BufferedReader reader = new BufferedReader(new InputStreamReader(zipInputStream));
while ((zipEntry = zipInputStream.getNextEntry()) != null ) {
String entryName = zipEntry.getFileName();
System.out.println(entryName);
if (!zipEntry.isDirectory()) {
String line;
while ((line = reader.readLine()) != null) {
//process the line
}
}
}
reader.close();
zipInputStream.close();

关于java - zip4j,从输入流中提取受密码保护的文件(blob 输入流,它是一个 zip 文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39220815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com