web-dev-qa-db-fra.com

Utilisation de Java pour extraire des fichiers .rar

Je cherche un moyen de décompresser les fichiers .rar en utilisant Java et, où que je recherche, je continue à me retrouver avec le même outil - JavaUnRar. J'ai cherché dans la décompression des fichiers .rar avec cela, mais tous les moyens que je semble trouver pour le faire sont très longs et maladroits, comme dans cet exemple

Je suis actuellement en mesure d'extraire des fichiers .tar, .tar.gz, .Zip et .jar en 20 lignes de code ou moins. Il doit donc exister un moyen plus simple d'extraire des fichiers .rar. Quelqu'un sait-il?

Si cela aide tout le monde, c’est le code que j’utilise pour extraire les fichiers .Zip et .jar, il fonctionne pour les deux

 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();
    }
}
11
flexinIT

Vous pouvez extraire des fichiers .gz, .Zip, .jar car ils utilisent le nombre d'algorithmes de compression intégrés au SDK Java.

Le cas avecRARformat est un peu différent. RAR est un format de fichier propriétaire archive. La licence RAR ne permet pas de l'inclure dans des outils de développement logiciel tels que Java SDK.

La meilleure façon de unrar _ vos fichiers utilisera des bibliothèques tierces telles que junrar .

Vous pouvez trouver des références à d'autres bibliothèques Java RAR dans SO question archives RAR avec Java . De plus, SO question Comment compresser un fichier texte au format rar à l'aide d'un programme Java explique davantage les différentes solutions de contournement (par exemple, en utilisant Runtime).

15
Tom

vous pouvez simplement ajouter cette dépendance maven à votre code:

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

puis utilisez ce code pour extraire le fichier 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.");
1
adramazany