# RAR Dateien mit JAVA extrahieren



## neomon (18. Juni 2008)

Hallo zusammen,

kennt einer von euch ne gute Bibliothek zum entpacken von RAR-Zip Dateien? Ich bin auf JUnRAR gestoßen, dass allerdings nicht so ganz rund läuft.

Bekomme dort oft nen HeapSizeOverflow, was wohl an einer der internen Methoden liegt.

Also meine Frage ist gibt noch andere Bibliotheken zum Extrahieren von RAR Dateien oder kennst sich jemand mit JUnRAR aus und kann mir da helfen?

Hier mein Code zum Extrahieren der RAR Dateien + Ergebnis in der Konsole:


```
@Override
public void extractArchive(File archive, File destDir) {
	// TODO Auto-generated method stub
	try {
		ReadOnlyAccessFile rarfile = new ReadOnlyAccessFile(archive);
		Archive rararchive = new Archive(rarfile);
		List<FileHeader> fileHeaders = rararchive.getFileHeaders();
		System.out.println("Size: "+fileHeaders.size());
		for(FileHeader header : fileHeaders){
			String fileNameString = header.getFileNameString();
			//Resultierende Datei festlegen
			File unpackedFile = new File(destDir, fileNameString);
				
			File parentFolder = unpackedFile.getParentFile();
			parentFolder.mkdirs();
				
			//Wenn es sich um einen Ordner handelt
			if(isFolder(header)){
				if(!unpackedFile.exists()){
					//Erstellen
					unpackedFile.mkdir();
				}
			} else {
				rararchive.extractFile(header, new FileOutputStream(unpackedFile));
			}
		}
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (RarException e) {
	        // TODO Auto-generated catch block
	        e.printStackTrace();
	}
}

-------------------------------------------------------------------------------------------------------------------
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at de.innosystec.unrar.unpack.ppm.SubAllocator.startSubAllocator(SubAllocator.java:155)
	at de.innosystec.unrar.unpack.ppm.ModelPPM.decodeInit(ModelPPM.java:199)
	at de.innosystec.unrar.unpack.Unpack.readTables(Unpack.java:668)
	at de.innosystec.unrar.unpack.Unpack.unpack29(Unpack.java:167)
	at de.innosystec.unrar.unpack.Unpack.doUnpack(Unpack.java:122)
	at de.innosystec.unrar.Archive.doExtractFile(Archive.java:322)
	at de.innosystec.unrar.Archive.extractFile(Archive.java:279)
	at de.test.home.AIDExtractors.RARExtractor.extractArchive(RARExtractor.java:39)
	at de.test.home.ExtractorImpl.extractArchive(ExtractorImpl.java:28)
	at de.test.home.ExtractorTest.main(ExtractorTest.java:10)
```

Vielen Dank im Voraus!

Grüße Andreas


----------

