先日お知らせしましたが、自作Androidアプリ「DOKUMAN」をアップデートしまして、RARファイルに対応しました。その際、Javaで使えるrarライブラリについていろいろ調べて、何とか動くところまで持っていけたのでその対応メモ。Javaで使えるフリーのrarライブラリとして直ぐに見つかったのがjava-unrarです。Roshalさんという方が作られたらしいですが、ライセンスをみても、フリーで使ってよくて、制限も特になさそうな記載でした。製作が2010年ということで、ちょっと古いかな~と思って、他に何か無いかと探したところ、上のものをベースにした、こちらが見つかりました。https://code.google.com/p/java-unrar/どうも、もともとのjava-unrarに、暗号化機能を付け加えたもののようです。(英語)試行錯誤した結果を載せておきます。はじめに、結論から言いますが、私の環境では、後者のほうは使えませんでした。Eclipseで開発していますが、両者のライブラリは、Archiveクラスのコンストラクタの引数が異なっており、ライブラリを変更した際に、ソースの修正が必要になります。その修正を施し、ソースファイル内には、エラーを表示するマークは全て無くなった(プロジェクトの左側に×印はついていない)状態になったにもかかわらず、実行しようとすると、「プロジェクトのエラーを取り除かなければコンパイルできない」といわれました。これの理由が、たとえばJavaのバージョンなど、開発環境に依存するものなのか、それとも、私のコーディングがまずいせいなのか、というところは正直、よくわかりません。ほうでのみ、動作確認しています。ちなみに、私は今回、「解凍」のほうしか試しておりません。(自分のアプリに必要だったのがこちらだけだったので)「圧縮」のほうはまた別の作法が何か必要なのかもしれませんが、そちらはご自身でお試し下さい。それから、大元のGitHubサイト上では、ソースコードしか配布されていません。キーワードで検索すれば、ダウンロードできるサイトがぱらぱらと見つかりますので、適当に探して、DLしてください。当初のものと同じままかどうか、というところがちょっと怖いところではありますが、インポートするときのパッケージネームもソースと同じだったし、そこは信用しよう、ということで...(というか、pom.xmlのプロジェクトのビルド方法がわからなかっただけなんですが...これって、どういう風にビルドすればよいのでしょうか?)以下、私が作った解凍処理のソースと、ポイントです。RARファイル形式を処理するためのクラスを作って、そのメソッドを外から呼び出す形で処理しました。一部省略しますので、変数名など定義がない箇所もありますが了承下さい。保存されていたファイルの数を返す。//この時点で、RARファイル内のファイルが解凍され、foutに保存される。foutの中にバッファが入っているのかと思って、これを直接いろいろ操作しようとしたんですが、このやり方はうまくいきませんでした。調べたら、これを実行した時点ですでにファイルが作成され、解凍・保存までされているようだったので、いったんfoutはcloseして、新しいファイルとして対象ファイルを読込みなおすことで、あっさりとうまくいきました。以上、参考になれば幸いです。