通过输入流读取压缩文件中的每一个文件,返回list,包含文件名以及base64编码
ZIP
public static List readZipToInputStream(InputStream inputStream) throws Exception {
List<Map> list = new ArrayList<>();
//转化文件流为压缩文件流
ZipInputStream zipInputStream = new ZipInputStream(inputStream, Charset.forName("gbk"));
ZipEntry zipEntry;
while ((zipEntry = zipInputStream.getNextEntry()) != null) {
String fileName=zipEntry.getName();
Map<String, String> map = new HashMap<>();
//文件读取处理
byte[] buffer = new byte[1024];
int len;
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
while ((len = zipInputStream.read(buffer)) != -1) {
byteStream.write(buffer, 0, len);
}
// 关闭流
byteStream.close();
String base64EncodedString = byteArrayToBase64(byteStream.toByteArray());
map.put("fileName",fileName);
map.put("fileInfo",base64EncodedString);
list.add(map);
}
return list;
}
RAR
由于RAR5算法未公开,此方法仅支持RAR4
引入maven库
<dependency>
<groupId>com.github.junrar</groupId>
<artifactId>junrar</artifactId>
<version>7.5.0</version>
</dependency>
public List<Map<String, String>> readRarToInputStream(InputStream inputStream) throws IOException {
List<Map<String, String>> list = new ArrayList<>();
try (Archive archive = new Archive(inputStream)) {
FileHeader fileHeader;
while ((fileHeader = archive.nextFileHeader()) != null) {
String fileName = fileHeader.getFileName();
Map<String, String> map = new HashMap<>();
// 文件读取处理
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
try (InputStream fileStream = archive.getInputStream(fileHeader)) {
byte[] buffer = new byte[1024];
int len;
while ((len = fileStream.read(buffer)) != -1) {
byteStream.write(buffer, 0, len);
}
}
// 转换为 Base64 编码的字符串
String base64EncodedString = byteArrayToBase64((byteStream.toByteArray()));
map.put("fileName", fileName);
map.put("fileInfo", base64EncodedString);
list.add(map);
}
} catch (UnsupportedRarV5Exception e) {
LOG.error(e.getMessage());
LOG.error("不支持rar5格式");
} catch (RarException e) {
LOG.error(e.getMessage());
}
return list;
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容