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();
}
}
Java SDKに組み込まれている多数の圧縮アルゴリズムを使用しているため、.gz
、.Zip
、.jar
ファイルを抽出できます。
[〜#〜] rar [〜#〜]形式の場合は少し異なります。 RARは、独自のアーカイブファイル形式です。 RARライセンス Java SDKなどのソフトウェア開発ツールに含めることはできません。
ファイルをunrarする最良の方法は、 junrar などのサードパーティライブラリを使用することです。
他のJava RARライブラリへの参照はSO質問 Javaを使用したRARアーカイブ 。またSO質問 Javaプログラム を使用してテキストファイルをrar形式に圧縮する方法)==さまざまな回避策(たとえば、Runtime
を使用)について詳しく説明します。
ライブラリ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();
}
この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.");