簡體   English   中英

從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但這返回null。

我需要制作一個saveTarStreamToS3()還是可以從TarArchiveInputStream中制作一個InputStream?

FileInputStream僅讀取真實文件。 它不會從存檔內部讀取數據。

有兩種可能的解決方案

  • 使用FileStream和TarArchiveInputStream隱含的InputStream
  • 將文件復制到磁盤,使用FileInputStream讀取,然后刪除。

接口InputStream的目的是讓您無需知道數據來自何處,這是解決此問題的自然方法。

我可以用TarArchiveInputStream制作InputStream嗎

TarArchiveInputStream實現InputStream,因此無需執行任何操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM