zipファイルを指定したディレクトリに取得しそこで解凍を行う処理をjavaにて書いているのですがzipInputStreamを使用すると「javaライブラリを1.7にしてください」とのエラーが出ます。(現在の環境eclipse Indico,ライブラリ-1.6)
zipInputStreamを使わずにJavaでzipファイルを解凍する方法はありますでしょうか・・?
調べてもzipInputStreamを使う前提でのやり方しか出てこないです・・。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/18 02:02
回答3件
0
zipInputStreamを使わずにJavaでzipファイルを解凍する方法はありますでしょうか・・?
についてはA-pZさんが回答されているのでそれとは違う点をコメントしてみます。
「javaライブラリを1.7にしてください」とのエラーが出ます。
JREに用意されているZip関連ライブラリーはJava1.1~Java1.6までの期間でサポートされていてJava1.7でないと使えない機能はないと思います。JREのZipは機能的に不足している点はありますけどソースコードに書いたからといってEclipseやJavacが「あなたのやろうとしていることはJava1.7でないと使えないよ」と言ってくれるはずがないと思うのです。
それゆえ「なぜ上のエラーメッセージが出たのか」が気になりました。ひょっとするとこのクラスを使っているかどうかとは関係なくJava1.7から新たにサポートされたJavaの言語仕様を使っていることが原因ではないでしょうか?思いつくものとしてはtry-with-resource構文が挙げられると思います。
java
1import java.io.*; 2import java.util.zip.*; 3 4class Test { 5 public static void main(String[] args) throws IOException { 6 try (InputStream in = new FileInputStream("xxx.zip"); 7 ZipInputStream zin = new ZipInputStream(in)) { 8 } 9 } 10}
bash
1$ javac --release 7 Test.java # OK 2$ javac --release 6 Test.java # NG 3... 4T.java:6: エラー: try-with-resourcesは-source 6でサポートされていません 5 try (InputStream in = new FileInputStream("x.zip"); 6 ^ 7 (try-with-resourcesを有効にするには-source 7以上を使用してください) 8エラー1個 9警告3個
try-with-resourceがサポートされて以降、close漏れを防ぐベストプラクティスとしてこの構文を(使える場所では)必ず使うことが多くサンプルコードなどもJava1.7以降前提で書かれている場合もあるかと思います。しかしJava1.6以前ではtry-with-resource構文は使えませんので
java
1InputStream in = null; 2ZipInputStream zin = null; 3try { 4 in = new FileInputStream("x.zip"); 5 zin = new ZipInputStream(in); 6 ... 7} finally { 8 if (zip != null) { 9 ... 10 } 11 ... 12} 13
のような形でfinally節に後始末を書く必要があります。
外してたらスミマセン
投稿2018/05/18 02:49
総合スコア18392
0
ベストアンサー
Java6なら、zip4jを使う手段もあります。
実装サンプルも公開されてます。
http://www.lingala.net/zip4j/download.php
zipファイル内のディレクトリ階層もたどって解凍する例は…
java
1import net.lingala.zip4j.core.ZipFile; 2import net.lingala.zip4j.exception.ZipException; 3 4public class Application { 5 public static void main(String[] args) throws ZipException { 6 String filename = "F:/app/wildfly-servlet-10.1.0.Final.zip"; 7 8 Application application = new Application(); 9 application.unzip(filename); 10 } 11 12 public void unzip(String filename) throws ZipException { 13 ZipFile zipFile = new ZipFile(filename); 14 15 zipFile.extractAll("F:/app/"); 16 } 17}
投稿2018/05/18 02:11
総合スコア12011
0
ほとんどJavaは使っていないので意味不明なことをいうかもしれませんが。
方法1: javac ( JDK ) や エンドユーザ向けのJavaもそれぞれ1.7以降にアップデートする
方法2: ZipInputStreamを使う <- 今回エラーが出たという質問
方法3: FileSystems.newFileSystemを使う <- たぶん同じくエラーが出ると思う。"JDK1.7以降"とあるので。
参考URL1: Zipファイル
参考URL1のリンクに"jarファイル"がある。
参考URL2: jarファイル
Javaのjarファイルは単なるzipファイルと同じみたい。(ソースは忘れた...)
方法3: jarファイルを「流用して」使用する。 コマンドライン引数なり「ファイルを開く」ダイアログのような感じでもいいから引き受ける場合は、 いったんjarファイルにして取り出したりして、元のzipに戻すみたいにする <- 苦肉の策
方法4: C/C++なりPython, JScript ( WSHを使う方 ), VBScript...といった別の言語のスクリプトか実行ファイルに渡して処理してもらう。そのバージョンだと ProcessBuilderクラス。JDK1.4までならRuntimeクラスを使うらしい。
参考URL3: 外部プロセス起動
方法5: 邪道中の邪道だと思うが、ほかの言語と連携をとるような処理を加える。 Java + C言語, Java + C++ であれば JNI等。
「Java C言語 連携」みたいに検索。
私が思いつくのはこれだけ。
投稿2018/05/18 02:21
総合スコア4958
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。