gpt4 book ai didi

java - 从 TarArchiveInputStream 中获取 InputStream

转载 作者:行者123 更新时间:2023-12-02 10:33:53 26 4
gpt4 key购买 nike

我正在从 FTP 获取文件。我得到的文件是文本文件或 tar.gz

对于文本文件,我只是将它们发送到 S3。如果我遇到 tar.gz,我想解压它并用相同的方法保存每个文件。

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());
}
}

我尝试使用 new FileInputStream(entry.getFile()) 直接保存条目,但这返回 null。

我是否需要创建一个 saveTarStreamToS3() 或者我可以从 TarArchiveInputStream 中创建一个 InputStream 吗?

最佳答案

FileInputStream 只读取真实文件。它不会从存档内部读取数据。

有两种可能的解决方案

  • 使用 FileInputStream 和 TarArchiveInputStream 实现的 InputStream
  • 将文件复制到磁盘,使用 FileInputStream 读取,然后删除。

接口(interface)InputStream的目的是让您不需要知道数据来自哪里,这是解决这个问题的自然方法。

can I make an InputStream out of a TarArchiveInputStream

TarArchiveInputStream 实现了 InputStream,因此无需执行任何操作。

关于java - 从 TarArchiveInputStream 中获取 InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53444291/

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