Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с ZIP 
V
    Опции темы
Sherst
Дата 5.2.2006, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 26.10.2005

Репутация: нет
Всего: 2



Привет всем!
Вообщем проблема с архивированием данных
вот некоторый код:

Код

    public static void zipDir(String dir2zip, ZipOutputStream zos) {
        try {
            File zipDir = new File(dir2zip);
            String[] dirList = zipDir.list();
            byte[] readBuffer = new byte[2156];
            int bytesIn = 0;
            for (int i = 0; i < dirList.length; i++) {
                File f = new File(zipDir, dirList[i]);
                if (f.isDirectory()) {
                    String filePath = f.getPath();
                    zipDir(filePath, zos);
                    continue;
                }
                FileInputStream fis = new FileInputStream(f);
                ZipEntry anEntry = new ZipEntry(f.getPath().substring(f.getPath().indexOf(File.separatorChar) + 1));
                zos.putNextEntry(anEntry);
                while ((bytesIn = fis.read(readBuffer)) != -1) {
                    zos.write(readBuffer, 0, bytesIn);
                }
                fis.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


Использую ZipDir так
Код

 ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipName));
            zipDir(dirName, zos);
            zos.close();


Упаковывает все нормально, но если попытаться распаковать, то ничего не получится.
Подскажите как правильно распаковывать.
Заранее спасибо.
PM MAIL   Вверх
LSD
Дата 5.2.2006, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Sherst @ 5.2.2006, 15:36 Найти цитируемый пост)
Упаковывает все нормально, но если попытаться распаковать, то ничего не получится.

Что именно не получается? (и код приведи)


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Sherst
Дата 5.2.2006, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 26.10.2005

Репутация: нет
Всего: 2



Привет, LSD.

Не получается распаковать архив программно

вот код:
Код

package untitled8;

import java.io.*;
import java.net.*;
import java.util.zip.*;


public class Frame1
{
  public static void main(String[] args)
  {
    FileOutputStream out3 = null;
    InputStream in = null;
    File copyToDir = new File("E:\\Temp");
    int size;
    try
    {
      //Сначала пакуем файлы
      ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("C:\\test.rar"));
      zipDir("C:\\Custom\\", zos); //Берем файлы, которые находятся в этой директории
      zos.close();
      //Упаковалось вроде нормально
      ////////////////////////////////
      //Затем распаковываем
      //Как правильно не знаю
      ZipFile zf = new ZipFile("C:\\test.rar");
      while (zf.entries().hasMoreElements()){
        ZipEntry ze = (ZipEntry)zf.entries().nextElement();
        System.out.println(ze);
        if (ze.isDirectory()){
          //System.out.println(ze.getName());
          //Как-то обработать эту ситуацию
        }
        else{
          in = zf.getInputStream(ze);
          out3 = new FileOutputStream("E:\\"+ze.getName());
          while ((size = in.read()) != -1)
            out3.write(size);
          out3.close();
          in.close();
        }
      ////////////////////////////////
    }
    }
    catch(Exception ex)
    {
      ex.printStackTrace();
    }
  }

  //******************************************************************//
  // Метод для упаковки фалов в архив
  //******************************************************************//
  public static void zipDir(String dir2zip, ZipOutputStream zos) {
        try {
            //create a new File object based on the directory
            File zipDir = new File(dir2zip);
            //get a listing of the directory content
            String[] dirList = zipDir.list();
            byte[] readBuffer = new byte[2156];
            int bytesIn = 0;
            //loop through dirList, and zip the files
            for (int i = 0; i < dirList.length; i++) {
                File f = new File(zipDir, dirList[i]);
                System.out.println(f.getAbsolutePath());
                if (f.isDirectory()) {
                    //if the File object is a directory, call this
                    //function again to add its content recursively
                    String filePath = f.getPath();
                    zipDir(filePath, zos);
                    //loop again
                    continue;
                }
                //if we reached here, the File object f was not a directory
                //create a FileInputStream on top of f
                FileInputStream fis = new FileInputStream(f);
                //create a new zip  entry
                ZipEntry anEntry = new ZipEntry(f.getPath().substring(f.getPath().indexOf(File.separatorChar)+1));
                //place the zip entry in the ZipOutputStream object
                zos.putNextEntry(anEntry);
                //now write the content of the file to the ZipOutputStream
                while ((bytesIn = fis.read(readBuffer)) != -1) {
                    zos.write(readBuffer, 0, bytesIn);
                }
                //close the Stream
                fis.close();
            }
        } catch (Exception e) {
            //handle exception
        }
    }
}




PM MAIL   Вверх
LSD
Дата 6.2.2006, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Проблема в том, что путь в который ты пытаешься распаковать не существует. Его надо предварительно создать:
Код
  public static void main(String[] args)
  {
    try
    {
      ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("C:\\TMP\\test.zip"));
      zipDir("C:\\TMP\\1", zos); //Берем файлы, которые находятся в этой директории
      zos.close();

      //Затем распаковываем Как правильно не знаю
      ZipFile zf = new ZipFile("C:\\TMP\\test.zip");
      Enumeration zipEntries = zf.entries();
      while(zipEntries.hasMoreElements())
      {
        ZipEntry ze = (ZipEntry) zipEntries.nextElement();
        System.out.println(ze);
        if(ze.isDirectory())
        {
          System.out.println(ze.getName());
          //Как-то обработать эту ситуацию
        }
        else
        {
          InputStream in = zf.getInputStream(ze);
          File file = new File("C:\\TMP\\unp\\" + ze.getName());
          if(!file.getParentFile().exists())
            file.getParentFile().mkdirs();
          FileOutputStream out3 = new FileOutputStream(file);
          int size;
          while((size = in.read()) != -1)
            out3.write(size);
          out3.close();
          in.close();
        }
      }
    }
    catch(Exception ex)
    {
      ex.printStackTrace();
    }
  }



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Sherst
Дата 6.2.2006, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 26.10.2005

Репутация: нет
Всего: 2



Да, я чуточку протупил.

to LSD
Спасибо.

PM MAIL   Вверх
intr
Дата 13.3.2006, 05:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 18.12.2005

Репутация: 1
Всего: 2



Есть специальный проект Virtual file system на jakarta.apache.org для работы с различными файловыми системами. Также он позволяет работать с zip файлами.
Пример разархивирования файла:
Код

StandardFileSystemManager manager = (StandardFileSystemManager) VFS.getManager();
FileObject fo1 = manager.resolveFile("file:D:/Temp/file");
FileObject zipFile = manager.resolveFile("zip://D:/Temp/file.zip");
fo1.copyFrom(zipFile, new AllFileSelector());

P/S Намного удобнее чем преведенный выше кодsmile
--------------------
Исследователь бытия и по совместительству Java-developer
PM MAIL WWW Skype GTalk   Вверх
Metal_Heart
Дата 14.3.2006, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

Репутация: 4
Всего: 12



И в догонку, а возможно ли создать zip-архив запароленный, если да то чем?


--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3389 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.