zipフォルダの解凍方法とファイル確認の手順

このQ&Aのポイント
  • zipフォルダ実行時に格納したファイルの確認方法を解説します
  • zipフォルダの解凍方法とファイルの確認について詳しく紹介します
  • Javaを使用してzipフォルダの解凍とファイルの確認を行う方法を解説します
回答を見る
  • ベストアンサー

zipフォルダの解凍

いつもお世話になっています。 zipフォルダ実行時のことで質問します。 指定のファイルをzipフォルダに格納して、フォルダ名を指定して格納することはできました。 それで、逆に、zipフォルダにどんなファイルがあるかを確かめたいと思ったのですが、可能なのでしょうか? zipフォルダに格納できたので、それを逆に変えてしようとしたのですが、いまいちわかりません。 zipフォルダに格納したソースは以下です。 import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipOutStream_Test { public static void main(String[] args) throws Exception { File zipf = new File("D:/zip_Java.zip"); //zipファイルに埋め込むfile名 File[] files = { new File("directory.txt") }; ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipf)); try { encode(zos,files); } catch (IOException e) { }catch(Exception e) { }finally { zos.close(); } } static byte[] buf = new byte[1024]; public static void encode(ZipOutputStream zos, File[] files) throws Exception { for(File f: files) { if(f.isDirectory() ) { encode(zos, f.listFiles() ); }else { ZipEntry ze = new ZipEntry(f.getPath().replace('\\', '/')); zos.putNextEntry(ze); InputStream is = new BufferedInputStream(new FileInputStream(f)); for (;;) { int len = is.read(buf); if (len < 0) break; zos.write(buf, 0, len); } is.close(); } } } } 宜しくお願いします。

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

ZipFileクラスのentriesメソッドを使えば取れるわ。 APIドキュメントが読めるようにがんばってね。

kannitiha
質問者

お礼

ありがとうございます。 無事、解決できました。 また、よろしくお願いします。

関連するQ&A

  • AndroidでZIP解凍したい

    WindowsXPSP3のEclipse(JUNO)でAndroidアプリの開発をしています。 ZIPファイル解凍を行うためimport org.apache.tools.zip.ZipOutputStreamとしてインポート文を書いたところ「インポートされた org.apache.tools は見つかりません」と怒られてしまいます。 設定>Ant>ランタイムにant.jarがあるだけではだめなのでしょうか。 ※ZIPファイルに日本語フォルダを含むのでorg.apache.toolsを使用したいです。

  • 固定長データの情報処理について

    現在情報処理についての勉強中ですが import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.ByteBuffer; public class dat_stream { public static void main(String[] args) { // 読み込むファイルの名前 String inputFileName = "ファイル名"; // 書き込むファイルの名前 String outputFileName = "ファイル名"; // ファイルオブジェクトの生成 File inputFile = new File(inputFileName); File outputFile = new File(outputFileName); try { // 入力ストリームの生成 FileInputStream fis = new FileInputStream(inputFile); BufferedInputStream bis = new BufferedInputStream(fis); // 出力ストリームの生成 FileOutputStream fos = new FileOutputStream(outputFile); BufferedOutputStream bos = new BufferedOutputStream(fos); // 読み込み用バイト配列 byte[] buf = new byte[9]; // ファイルへの読み書き int len = 0; while ( ( len = bis.read(buf) ) != -1 ) { bos.write(buf, 0, len); } // 後始末 bos.flush(); bos.close(); bis.close(); // エラーがあった場合は、スタックトレースを出力 } catch(Exception e) { e.printStackTrace(); } } } を使用してDATデータの入出力を考えています。 F0 F2 12 34 56 78 9C 00 50といった9byteの固定長データが あったとします。 (1)1byteから2byteはそのまま入出力 F0 F2 →F0 F2 (2)3byte~7byteパック10進数からアンパック(ゾーン)10進数に変換 12 34 56 78 9C →F1 F2 F3 F4 F5 F6 F7 F8 F9 こちらに関しては上位桁・下位桁で計算し正の数・負の数等も 考えなければいけないと思うのですが・・・ (3)バイナリ進数からゾーン10進数に変換 00 50→F0 F0 F8 F0 計算方法)0*16進数3剰 + 0*16進数2剰 + 5*16進数1剰+ 0 このような(1)~(3)のようなバイナリ入出力を考えた場合 1レコードが9byteで 10レコードで90byteだった場合の 書き出し方法について情報処理について詳しい方いましたら アドバイスください。 なお数値変換については今後勉強していければと思っております。 どうぞよろしくお願い致します。

    • ベストアンサー
    • Java
  • Zipファイル解凍処理について

    こんにちわ。 Javaの解凍処理について質問です。 Test.zipがあって、その中身が「テスト.xls」とした時、うまく解凍ができません。 Zipファイルの中身が日本語名ではなく、「Test.xls」であれば正常に解凍ができます。 下記の書き方では日本語名のファイルの入ったZipファイルを解凍することはできないのでしょうか? どなたかご教授お願い致します。 String fname = null; FileInputStream fis = null; BufferedInputStream bis = null; ZipInputStream zis = null; ZipEntry zent = null; FileOutputStream fos = null; try { fis = new FileInputStream(FilePath); bis = new BufferedInputStream(fis); zis = new ZipInputStream(bis); byte[] buf = new byte[1024]; int len; // アーカイブ中に含まれるファイル情報の取得 while ((zent = zis.getNextEntry()) != null) { int intResult = zent.toString().indexOf("."); int intLength = zent.toString().length(); //ファイル名の変更(フォルダ名+社員コード)StringBuffer BuffRename = new StringBuffer(); BuffRename.append("D:\\test\\"); BuffRename.append(zent.getName().substring(0,intResult)); BuffRename.append(SyainCd); BuffRename.append(zent.getName().substring(intResult,intLength)); fname = BuffRename.toString(); //書き込みファイルをオープン fos = new FileOutputStream(fname); while (-1 != (len = zis.read(buf, 0, buf.length))) { fos.write(buf, 0, len); } //★★★ fos.close(); } Catch・finallyは省略

  • 固定長データのbyteスキップについて

    バイナリ入出力でご質問がございます。 下記の例のように各レコードにある 先頭5byte付与されたデータを スキップ(破棄)して 各レコード10byteずつ読み込みたいのですが なにかサンプルデータもしくは アドバイス頂けないでしょうか? どうぞよろしくお願い致します。 例 1レコード 10byte (先頭5byte付与) LLLLL1234567890 LLLLL1234567890 LLLLL1234567890 LLLLL1234567890 LLLLL1234567890 ↓ 1234567890 1234567890 1234567890 1234567890 1234567890 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.ByteBuffer; import java.io.ByteArrayOutputStream; public class dat{ public static void main(String[] args) { String inputFileName = ""; String outputFileName = ""; // ファイルオブジェクトの生成 File inputFile = new File(inputFileName); File outputFile = new File(outputFileName); try { FileInputStream fis = new FileInputStream(inputFile); BufferedInputStream bis = new BufferedInputStream(fis); FileOutputStream fos = new FileOutputStream(outputFile); BufferedOutputStream bos = new BufferedOutputStream(fos); byte[] buf = new byte[17]; int len = 0; while ((len = bis.read(buf, 0, 17)) == 17) { bos.write(buf, 0, 17); } bos.flush(); bos.close(); bis.close(); } catch(Exception e) { e.printStackTrace(); } }

    • ベストアンサー
    • Java
  • レコード長からのbyteスキップ設定について

    QNo.8229324から あらたに新規でご質問させて頂きます。 1レコードごとに10byteあったとします。 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 レコード長からスキップ設定を35byteと設定したとします。 40byteごとに頭の付与された5byteをスキップさせたいのですが なにかサンプル及びアドバイス頂けますでしょうか? 仕様案 (1)まずはレコード先端の5byteをスキップ (2)次は35byteを超えた時点で5byteスキップを繰り返し。 どうぞ宜しくお願い致します。 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.ByteBuffer; import java.io.ByteArrayOutputStream; public class dat{ public static void main(String[] args) { String inputFileName = ""; String outputFileName = ""; // ファイルオブジェクトの生成 File inputFile = new File(inputFileName); File outputFile = new File(outputFileName); try { FileInputStream fis = new FileInputStream(inputFile); BufferedInputStream bis = new BufferedInputStream(fis); FileOutputStream fos = new FileOutputStream(outputFile); BufferedOutputStream bos = new BufferedOutputStream(fos); byte[] buf = new byte[17]; int len = 0; while ((len = bis.read(buf, 0, 17)) == 17) { bos.write(buf, 0, 17); } bos.flush(); bos.close(); bis.close(); } catch(Exception e) { e.printStackTrace(); } }

    • ベストアンサー
    • Java
  • javaプログラミング

    javaとYahooのWebサービスを利用して、検索結果のxmlを取り出し、 ○○.xmlという引数を与えて、結果を書き出そうとしていますが、 以下のプログラムだと文字(日本語)が化けてしまいます。 どうにかして文字化けせず取り出すことはできないでしょうか。 よろしくおねがいします。 import java.io.BufferedWriter; import java.io.FileWriter; import java.io.InputStream; import java.net.URL; public class YahooWebServiceExample { public static void main(String[] args) { String request = "http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch? appid=web_research&query=%e6%b2%96%e7%b8%84&results=2"; try { // ファイル出力ストリームを取得(第二引数) BufferedWriter bw = new BufferedWriter(new FileWriter(args[0])); URL url = new URL(request); InputStream in = url.openStream(); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { for (int i = 0; i < len; i++) { System.out.print((char) buf[i]); bw.write(buf[i]); } } in.close(); bw.close(); } catch (Exception e) { System.out.println("Web services request failed"); } } }

    • ベストアンサー
    • Java
  • Zip(Pass)のファイルの解凍時間の短縮

    Zip(Pass)のファイルの解凍時間の短縮 JavaでZip(Pass)のファイルをSDカードから読込む処理を実装してます。 実際にほしいのは1つのEntryだけで現在下記のように実装してますが、 一つの画像(500kb程度)を引き出すのに4秒以上掛かってしまいます。 zf = new ZipFile(new File(filaName), "UTF-8"); zf.setPassword(password.getBytes("UTF-8")); zf.setCheckCrc(true); //since 2008-12-21 for (Iterator<ZipEntry> i = zf.getEntriesIterator(); i.hasNext();) { ze = i.next(); if(ze.getName().equals(pageNo)){ is = zf.getInputStream(ze); bos = new ByteArrayOutputStream(); for (;;) { int size = is.read(); if (size == -1) break; bos.write(size); } is.close(); b= bos.toByteArray(); bos.close(); break; } } zf.close(); もっと効率の良い実装方法ありますでしょうか? Iterator<ZipEntry>を使用せずにZipFileのgetEntry(String)で使えると思いましたがZipEntryが戻りませんでした。 ZipPassはhisidamaさんのサイトからjarを使わせて頂いてます。 http://www.ne.jp/asahi/hishidama/home/tech/soft/java/zip.html 全て展開すると時間が掛かるので必要なEntryだけ取り出して使いたいです。 以上、よろしくお願いします。

    • ベストアンサー
    • Java
  • ObjectInputStreamとStreamCorruptedExceptionについて

    このようなソースがあり ------------------------------------------------- import java.io.File; import java.io.FileInputStream; import java.io.ObjectOutputStream; import java.io.ObjectInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.BufferedInputStream; import java.io.Serializable; import java.io.ByteArrayInputStream; public class TTT{ public static void main( String[] args ){ try{ FileInputStream fis = new FileInputStream( "C:\\aa\\ddd.txt" ); //FileInputStream fis = new FileInputStream( "C:\\aa\\aa.jpg" ); ObjectInputStream ois = new ObjectInputStream( fis ); }catch( Exception w ){ w.printStackTrace(); } } } ------------------------------------------------- これをコンパイルをかけて実行すると java.io.StreamCorruptedException: invalid stream header at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:737) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:253) at TTT.main(TTT.java:24) となってしまいます。 読み込むファイルをコメント部分の画像ファイルに 変えてみても同様です。 StreamCorruptedExceptionの内容はJAVAのAPIドキュメントでは読み込まれた制御情報が、内部整合検査に違反した場合にスローされると説明がありますがこれはどういう意味でしょうか? また正しく実行させるにはどのようにすればいいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • java.util.zipで作成したアーカイブに、空フォルダを格納したい

    java.util.zipで空フォルダを格納したいのですが、思った動作にならず、困ってます。 どうかお助けください。 下のプログラムでは、作成されたcreated.zipを展開すると、その中にmyDirectoryというディレクトリを作成したいのですが、このまま実行すると、展開するときになぜか管理者権限を求められて、そして成功もしません。 問題の場所にDIRECTORYNAME2を指定すると、展開はできるのですが、「指定されたファイル名と同じフォルダが既に存在します」と言われ、スキップを選択するときちんとディレクトリが作成されていますが、きちんとしたZip圧縮ファイルで圧縮した場合、そのようなことは聞かれません。 org.apache.tools.zip.*を使用した場合でも結果は同じでしたので、JDKのバグというのは考えにくい気がしますが・・。 ---------------- プログラム ------------------- final File fCreate = new File("./created.zip"); final String DIRECTORYNAME1 = "myDirectory/"; final String DIRECTORYNAME2 = "myDirectory//"; ZipOutputStream out = new ZipOutputStream(new FileOutputStream(fCreate)); // 問題の場所 ZipEntry dirEntry = new ZipEntry(DIRECTORYNAME1); out.putNextEntry(dirEntry); out.closeEntry(); ZipEntry fileEntry = new ZipEntry("myFile"); out.putNextEntry(fileEntry); out.closeEntry(); out.close();

  • CSV読み込み 文字化け

    失礼いたします。 以前のログを見てエンコードを設定してみたのですが、出力が文字化けします。ローカルファイルを読み込んでコンソール出力しているだけなのですが・・・。 分かる方、よろしくお願いします。 -------------------ソースはここから import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; // import java.io.FileReader; FileReaderからInputStreamReaderに変更済み import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class ReadCSV { public static void main(String[] args) { try { File csv = new File("C:\\AP.csv"); // BufferedReader br = new BufferedReader(new FileReader(csv)); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"EUC_JP")); // BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"MS932")); while (br.ready()) { String line = br.readLine(); StringTokenizer st = new StringTokenizer(line, ","); while (st.hasMoreTokens()) { System.out.print(st.nextToken() + "\t"); } System.out.println(); } br.close(); } catch (FileNotFoundException e) { キャッチ処理 }

    • ベストアンサー
    • Java

専門家に質問してみよう