質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

zip

ZIPとは、複数のファイルをひとつにまとめて圧縮したり、圧縮したファイルを展開することができるアーカイブフォーマットです。 1998年以降のWindowsOS各バージョンで、標準の圧縮フォルダとして採用されています。 MacOSでも、X v10.3以降に他の圧縮ソフトとまとめてZIP機能を採用しています。

Q&A

解決済

3回答

841閲覧

zip解凍 java

sigret

総合スコア45

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

zip

ZIPとは、複数のファイルをひとつにまとめて圧縮したり、圧縮したファイルを展開することができるアーカイブフォーマットです。 1998年以降のWindowsOS各バージョンで、標準の圧縮フォルダとして採用されています。 MacOSでも、X v10.3以降に他の圧縮ソフトとまとめてZIP機能を採用しています。

0グッド

0クリップ

投稿2018/05/18 01:32

zipファイルを指定したディレクトリに取得しそこで解凍を行う処理をjavaにて書いているのですがzipInputStreamを使用すると「javaライブラリを1.7にしてください」とのエラーが出ます。(現在の環境eclipse Indico,ライブラリ-1.6)

zipInputStreamを使わずにJavaでzipファイルを解凍する方法はありますでしょうか・・?
調べてもzipInputStreamを使う前提でのやり方しか出てこないです・・。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/05/18 02:00

調べてみたこと、やってみたこと(そのソースコード)を具体的に追記してください。また参考先サイトがあればURLも質問に追記してください。既に見た先が回答についてしまうと無駄なやり取りが発生しますし、もしかしたら参考記事の理解が間違っているために解決に至れていないのかもしれません。https://teratail.com/help/question-tips#questionTips1-2
m.ts10806

2018/05/18 02:02

IndicoではなくIndigoですかね。いずれにしても古い環境は様々な面で良くないので、新しくされた方が。アップグレードできない事情があるのでしたらそちらも書かれた方が良いです。
guest

回答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

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sigret

2018/05/18 03:11

情報の乏しく説明へたくそな質問にお答えいただきありがとうございます。 別端末の環境が新しくなったEclipseにて今のコードをインポートしてみた所、エラーなく動きました!(エラーがなくなった原因についてはまだ不明ですが・・) 差分を調べて原因調査をしてまいります。ありがとうございます!
guest

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

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sigret

2018/05/18 03:12

情報の乏しく説明へたくそな質問にお答えいただきありがとうございます。 別端末の環境が新しくなったEclipseにて今のコードをインポートしてみた所、エラーなく動きました!(エラーがなくなった原因についてはまだ不明ですが・・) 差分を調べて原因調査をしてまいります。ありがとうございます!
guest

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

BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2018/05/18 02:22

あ、A-pZさんの仰るように、外部ライブラリ ( POIとかみたいなやつ ) がありましたね。 その方法もあります。
sigret

2018/05/18 03:12

情報の乏しく説明へたくそな質問にお答えいただきありがとうございます。 別端末の環境が新しくなったEclipseにて今のコードをインポートしてみた所、エラーなく動きました!(エラーがなくなった原因についてはまだ不明ですが・・) 差分を調べて原因調査をしてまいります。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問