从 TarArchiveInputStream 中获取 InputStream
Get InputStream out of TarArchiveInputStream
我正在从 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())
直接保存 entry
,但是这个 returns 为空。
我需要制作一个 saveTarStreamToS3()
或者我可以从 TarArchiveInputStream 制作一个 InputStream 吗?
FileInputStream 只读真正的文件。它不会从存档中读取数据。
有两种可能的解决方案
- 使用
InputStream
FileInputStream 和 TarArchiveInputStream impliements
- 复制文件到磁盘,使用FileInputStream读取,之后删除。
接口InputStream
的目的是让你不需要知道数据来自哪里,这是解决这个问题的自然方法。
can I make an InputStream out of a TarArchiveInputStream
TarArchiveInputStream 实现了 InputStream,因此无事可做。
我正在从 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())
直接保存 entry
,但是这个 returns 为空。
我需要制作一个 saveTarStreamToS3()
或者我可以从 TarArchiveInputStream 制作一个 InputStream 吗?
FileInputStream 只读真正的文件。它不会从存档中读取数据。
有两种可能的解决方案
- 使用
InputStream
FileInputStream 和 TarArchiveInputStream impliements - 复制文件到磁盘,使用FileInputStream读取,之后删除。
接口InputStream
的目的是让你不需要知道数据来自哪里,这是解决这个问题的自然方法。
can I make an InputStream out of a TarArchiveInputStream
TarArchiveInputStream 实现了 InputStream,因此无事可做。