我正在从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());
}
}
我尝试直接使用
entry
保存new FileInputStream(entry.getFile())
,但这返回null。我需要制作
saveTarStreamToS3()
还是可以用TarArchiveInputStream制作InputStream? 最佳答案
FileInputStream仅读取真实文件。它不会从存档内部读取数据。
有两种可能的解决方案
使用InputStream
表示FileInputStream和TarArchiveInputStream的含义
将文件复制到磁盘,使用FileInputStream读取,然后删除。
接口InputStream
的目的是让您无需知道数据来自何处,这是解决此问题的自然方法。
我可以用TarArchiveInputStream制作InputStream吗
TarArchiveInputStream实现InputStream,因此无需执行任何操作。