Как прочитать нужные файлы из архива rar непосредственно в InputStream (без распаковки всего архива)? - PullRequest
1 голос
/ 29 января 2020

Кажется довольно простым с zip-архивом, используя java .util.zip.ZipFile, как это:

public static void main(String[] args) throws IOException 
{
    final ZipFile zipFile = new ZipFile("C:/test.zip");

    final Enumeration<? extends ZipEntry> entries = zipFile.entries();

    while(entries.hasMoreElements())
    {
        final ZipEntry entry = entries.nextElement();

        if(entry.getName().equals("NEEDED_NAME"))
        {
            try(InputStream inputStream = zipFile.getInputStream(entry))
            {
                // Do what's needed with the inputStream.
            }
        }
    }
}

Какая альтернатива для rar-архивов?

Мне известно о Junrar, но я не нашел способа сделать это без извлечения всего архива в какую-либо папку.

Редактировать:

Я добавил "если предложение для entry.getName () ", просто чтобы указать, что меня интересует только некоторые указанные c файлы внутри архива, и я хотел бы избежать извлечения всего архива в какую-либо папку и последующего удаления этих файлов.

1 Ответ

0 голосов
/ 30 января 2020

Я сейчас использую что-то вроде этого (с Junrar):

final Archive archive = new Archive(new File("C:/test.rar"), null);

final LocalFolderExtractor lfe = new LocalFolderExtractor(new File("/path/to/temp/location/"), new FileSystem());

for (final FileHeader fileHeader : archive)
{
    if(fileHeader.getFileNameString().equals("NEEDED_NAME"))
    {
         File file = null;

         try
         {
             file = lfe.extract(archive, fileHeader);

             // Create inputStream from file and do what's needed.
         }
         finally
         {
             // Fully delete the file + folders if needed.
         }
    }
}

Может быть, есть лучший способ:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...