Java 从TarArchiveInputStream中获取InputStream
我正在从FTP获取文件。 我得到的文件不是文本文件就是tar.gz 对于文本文件,我只将它们发送到S3。如果我遇到一个tar.gz,我想解压它并用相同的方法保存每个文件Java 从TarArchiveInputStream中获取InputStream,java,amazon-s3,apache-commons-compress,Java,Amazon S3,Apache Commons Compress,我正在从FTP获取文件。 我得到的文件不是文本文件就是tar.gz 对于文本文件,我只将它们发送到S3。如果我遇到一个tar.gz,我想解压它并用相同的方法保存每个文件 public void handleFile() { try (InputStream fileStream = ftpFileService.getInputStream(file)) { if (file.getName().lastIndexOf(".TGZ") > -1) {
public void handleFile() {
try (InputStream fileStream = ftpFileService.getInputStream(file)) {
if (file.getName().lastIndexOf(".TGZ") > -1) {
TarArchiveInputStream tar = new TarArchiveInputStream(new GzipCompressorInputStream(fileStream));
TarArchiveEntry entry = null;
while ((entry = tar.getNextTarEntry()) != null) {
LOGGER.info("fileName to save {}", entry.getName());
saveStreamToS3(entry.getName(), new InputStream(tar));
}
tar.close();
} else {
LOGGER.info("fileName to save {}", fileName.getName());
saveStreamToS3(fileName.getName(), fileStream);
}
} catch (IOException e) {
LOGGER.error(e.getMessage());
}
}
我尝试直接使用新文件输入流(entry.getFile())
保存条目
,但返回空值
我是否需要制作一个
saveTarStreamToS3()
,或者我可以从一个TarArchiveInputStream制作一个InputStream?文件InputStream只读取真实文件。它不会从存档中读取数据
有两种可能的解决办法
- 使用
哪个文件InputStream和TarArchiveInputStream实现InputStream
- 将文件复制到磁盘,使用FileInputStream读取,然后删除
InputStream
的目的是不需要知道数据来自何处,这是解决这个问题的自然方法
我可以从TarArchiveInputStream生成InputStream吗
TarArchiveInputStream实现InputStream,因此无需执行任何操作。@gyc您不需要在向上投射时投射它。您只需要在向下转换时转换它,例如,
(TarArchiveInputStream)inputStream
需要转换。