web-dev-qa-db-ja.com

Javaを使用して.rarファイルを抽出する

Javaを使用して.rarファイルを解凍する方法を探しています。検索すると、同じツールで終わります-JavaUnRar.rarファイルを解凍する方法を検討しています。これですが、これを行うために私が見つけたように見えるすべての方法は、 この例 のように非常に長くて厄介です

現在、.tar.tar.gz.Zip、および.jarファイルを20行以下のコードで抽出できるので、.rarファイルを抽出するより簡単な方法が必要です。

これが.Zipファイルと.jarファイルの両方を抽出するために使用しているコードであることが誰かに役立つ場合は、両方で機能します

 public void getZipFiles(String zipFile, String destFolder) throws IOException {
    BufferedOutputStream dest = null;
    ZipInputStream zis = new ZipInputStream(
                                       new BufferedInputStream(
                                             new FileInputStream(zipFile)));
    ZipEntry entry;
    while (( entry = zis.getNextEntry() ) != null) {
        System.out.println( "Extracting: " + entry.getName() );
        int count;
        byte data[] = new byte[BUFFER];

        if (entry.isDirectory()) {
            new File( destFolder + "/" + entry.getName() ).mkdirs();
            continue;
        } else {
            int di = entry.getName().lastIndexOf( '/' );
            if (di != -1) {
                new File( destFolder + "/" + entry.getName()
                                             .substring( 0, di ) ).mkdirs();
            }
        }
        FileOutputStream fos = new FileOutputStream( destFolder + "/"
                                                     + entry.getName() );
        dest = new BufferedOutputStream( fos );
        while (( count = zis.read( data ) ) != -1) 
            dest.write( data, 0, count );
        dest.flush();
        dest.close();
    }
}
12
flexinIT

Java SDKに組み込まれている多数の圧縮アルゴリズムを使用しているため、.gz.Zip.jarファイルを抽出できます。

[〜#〜] rar [〜#〜]形式の場合は少し異なります。 RARは、独自のアーカイブファイル形式です。 RARライセンス Java SDKなどのソフトウェア開発ツールに含めることはできません。

ファイルをunrarする最良の方法は、 junrar などのサードパーティライブラリを使用することです。

他のJava RARライブラリへの参照はSO質問 Javaを使用したRARアーカイブ 。またSO質問 Javaプログラム を使用してテキストファイルをrar形式に圧縮する方法)==さまざまな回避策(たとえば、Runtimeを使用)について詳しく説明します。

19
Tom

ライブラリjunrarを使用できます

<dependency>
   <groupId>com.github.junrar</groupId>
   <artifactId>junrar</artifactId>
   <version>0.7</version>
</dependency>

コード例:

            File f = new File(filename);
            Archive archive = new Archive(f);
            archive.getMainHeader().print();
            FileHeader fh = archive.nextFileHeader();
            while(fh!=null){        
                    File fileEntry = new File(fh.getFileNameString().trim());
                    System.out.println(fileEntry.getAbsolutePath());
                    FileOutputStream os = new FileOutputStream(fileEntry);
                    archive.extractFile(fh, os);
                    os.close();
                    fh=archive.nextFileHeader();
            }
1
Jeremias Santos

このMaven依存関係をコードに追加するだけです。

<dependency>
    <groupId>com.github.junrar</groupId>
    <artifactId>junrar</artifactId>
    <version>0.7</version>
</dependency>

次に、このコードを使用してrarファイルを抽出します。

        File rar = new File("path_to_rar_file.rar");
    File tmpDir = File.createTempFile("bip.",".unrar");
    if(!(tmpDir.delete())){
        throw new IOException("Could not delete temp file: " + tmpDir.getAbsolutePath());
    }
    if(!(tmpDir.mkdir())){
        throw new IOException("Could not create temp directory: " + tmpDir.getAbsolutePath());
    }
    System.out.println("tmpDir="+tmpDir.getAbsolutePath());
    ExtractArchive extractArchive = new ExtractArchive();
    extractArchive.extractArchive(rar, tmpDir);
    System.out.println("finished.");
0
adramazany