Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将所需文件从rar归档文件直接读取到InputStream(而不提取整个归档文件)?_Java_Rar - Fatal编程技术网

Java 如何将所需文件从rar归档文件直接读取到InputStream(而不提取整个归档文件)?

Java 如何将所需文件从rar归档文件直接读取到InputStream(而不提取整个归档文件)?,java,rar,Java,Rar,使用java.util.zip.ZipFile进行zip存档似乎非常简单,如下所示: public static void main(String[] args) throws IOException { final ZipFile zipFile = new ZipFile("C:/test.zip"); final Enumeration<? extends ZipEntry> entries = zipFile.entries(); while(e

使用java.util.zip.ZipFile进行zip存档似乎非常简单,如下所示:

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.
            }
        }
    }
}
publicstaticvoidmain(字符串[]args)引发IOException
{
最终ZipFile ZipFile=新ZipFile(“C:/test.zip”);

最后的枚举我现在使用类似的东西(使用Junrar):


也许有更好的方法:)

我现在使用类似的东西(与Junrar一起):


也许有更好的方法:)

请注意,此代码将在您阅读时提取zip。不可能“阅读而不提取”。它只是对您隐藏了这一事实。哦,我明白了。我正在搜索rar的替代方案(无需显式提取到特定文件夹)。它应该在“幕后”完成这项工作与zip示例一样。此外,我可以使用entry.getName()将此代码仅针对所需的文件这就是我最想做的。我会稍微更新一下这个示例。它应该比提取整个归档文件快得多。RAR不是标准的文件格式,核心Java库中也不支持它们。寻找第三方RAR库我正在寻找第三方库(如Junrar和其他),但如果不将整个归档文件解压缩到特定文件夹(我不需要)。请注意,此代码将在您阅读时解压缩zip。不可能“读取而不解压缩”。它只是对您隐藏了这一事实。哦,我明白了。我正在搜索rar的替代方案(无需显式解压缩到特定文件夹)。它应该像zip示例一样在“幕后”完成该工作。此外,我可以使用以下代码将目标文件指向所需的条目。getName()这就是我最想做的。我会稍微更新一下这个示例。它应该比提取整个归档文件快得多。RAR不是标准的文件格式,核心Java库中也不支持它们。寻找第三方RAR库我正在寻找第三方库(如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.
         }
    }
}