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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение содержимого архива, Получение содержимого архива 
:(
    Опции темы
albertAshr
Дата 19.5.2010, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Может кто поможет, нужно получить содержимое Архива, пока тока zip, ну тоесть как в классе File метод listFiles(), с получением соответсвенно имени файла, размера, а так же нужно получить содержимое каталогов, тоесть всё дерево каталогов которое есть в архиве 
PM MAIL   Вверх
LSD
Дата 19.5.2010, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



ZipFile в помощь. Получаешь у него ZipEntry и строишь свое дерево.


--------------------
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   Вверх
albertAshr
Дата 19.5.2010, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а мона как нить закодированно это сказать)))
PM MAIL   Вверх
LSD
Дата 19.5.2010, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Идешь в Поиск вбиваешь в поиск ZipEntry и будет куча тем с примерами кода. Начинаешь в них разбираться, будут проблемы пишешь сюда.


--------------------
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   Вверх
albertAshr
Дата 19.5.2010, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



посматрел, что то я не нашёл подходящей для меня темы, мне именно нужно получить дерево содержимого, а не заархивиравать данные

Добавлено через 5 минут и 21 секунду
вот как то так зделал
 
Код

File file = new File("D:/zipfile.zip");
        ZipFile zf = new java.util.zip.ZipFile(file);
        Enumeration e = zf.entries();
        while (e.hasMoreElements())
        {
            System.out.print(e.nextElement().toString() + "\n");
        }


Печатает содержимое всё, это правельно?
PM MAIL   Вверх
LSD
Дата 19.5.2010, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(albertAshr @  19.5.2010,  14:32 Найти цитируемый пост)
Печатает содержимое всё, это правельно? 

В общем да, только это не будет тем деревом которое обычно показывают менеджеры архивов.


--------------------
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   Вверх
albertAshr
Дата 19.5.2010, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а как получить дерево?
PM MAIL   Вверх
LSD
Дата 21.5.2010, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Код

package vingrad;

import org.apache.log4j.Logger;

import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

public class ZipJTree
{
  private static final Logger logger = Logger.getLogger(ZipJTree.class);

  public static void main(String[] args)
  {
    showWindow("C:\\Develop\\JDK1.4.2_19\\src.zip");
  }

  private static void showWindow(String file)
  {
    try
    {
      DefaultTreeModel treeModel = createModel(new File(file));
      JTree tree = new JTree(treeModel);
      JFrame frame = new JFrame(file);
      frame.getContentPane().add(new JScrollPane(tree));
      frame.pack();
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
    }
    catch(Exception e)
    {
      logger.error(e, e);
      JOptionPane.showConfirmDialog(null, e.getMessage());
    }
  }

  public static DefaultTreeModel createModel(File file)
  {
    if(!file.exists() || !file.isFile())
    {
      logger.warn("Illegal argument, file " + file + " does not exist or not a file");
      throw new IllegalArgumentException("File " + file + " does not exist or not a file");
    }

    ZipFile zipFile = null;
    try
    {
      zipFile = new ZipFile(file);

      Enumeration<? extends ZipEntry> entries = zipFile.entries();
      DefaultTreeModel treeModel = new DefaultTreeModel(new DefaultMutableTreeNode(file.getName(), true));
      while(entries.hasMoreElements())
      {
        ZipEntry zipEntry = entries.nextElement();
        if(logger.isDebugEnabled())
        {
          logger.debug("Read entry " + zipEntry);
        }
        addEntry(treeModel, zipEntry);
      }
      return treeModel;
    }
    catch(IOException e)
    {
      logger.error("Error reading ZIP file", e);
      throw new RuntimeException("Error reading ZIP file", e);
    }
    finally
    {
      safeClose(zipFile);
    }
  }

  private static void addEntry(DefaultTreeModel treeModel, ZipEntry zipEntry)
  {
    String[] path = zipEntry.getName().split("\\/");
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) treeModel.getRoot();
    for(int i = 0; i < path.length; i++)
    {
      String name = path[i];
      boolean isDirectory = i < path.length - 1 || zipEntry.isDirectory();
      node = addNode(node, name, isDirectory);
    }
  }

  private static DefaultMutableTreeNode addNode(DefaultMutableTreeNode node, String name, boolean isDirectory)
  {
    Enumeration childrens = node.children();
    while(childrens.hasMoreElements())
    {
      DefaultMutableTreeNode children = (DefaultMutableTreeNode) childrens.nextElement();
      if(name.equals(children.getUserObject()))
      {
        return children;
      }
    }

    DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(name, isDirectory);
    node.add(newNode);
    return newNode;
  }


  private static void safeClose(ZipFile zipFile)
  {
    if(zipFile != null)
    {
      try
      {
        zipFile.close();
      }
      catch(IOException e)
      {
        logger.debug("Failed to close ZIP file", e);
      }
    }
  }
}




--------------------
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   Вверх
albertAshr
Дата 26.5.2010, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасиб LSD )))).....а вот ещё такая задача встала...если в архиве есть ещё архив, можно как нибудь также его дерево строить. Сперва извлечь из архива а потом строить я думаю решение не хорошее )
PM MAIL   Вверх
Skipy
Дата 4.6.2010, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 6
Всего: 16



Цитата(albertAshr @ 26.5.2010,  22:18)
а вот ещё такая задача встала...если в архиве есть ещё архив, можно как нибудь также его дерево строить. Сперва извлечь из архива а потом строить я думаю решение не хорошее )

1. Для того, чтобы построить дерево, надо прочитать zip-файл. Логично?
2. Для того, чтобы построить дерево по вложенному zip-файлу, надо прочитать вложенный zip-файл. Логично?
3. Для того, чтобы прочитать вложенный zip-файл, его надо извлечь из архива. Логично?


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
LSD
Дата 30.6.2010, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(Skipy @  4.6.2010,  10:30 Найти цитируемый пост)
Для того, чтобы прочитать вложенный zip-файл, его надо извлечь из архива. Логично? 

Нет smile Используя ZipInputStream можно все делать в памяти. Но это сложнее.


--------------------
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   Вверх
Skipy
Дата 30.6.2010, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 6
Всего: 16



Цитата(LSD @ 30.6.2010,  13:46)
Цитата(Skipy @  4.6.2010,  10:30 Найти цитируемый пост)
Для того, чтобы прочитать вложенный zip-файл, его надо извлечь из архива. Логично? 

Нет smile Используя ZipInputStream можно все делать в памяти. Но это сложнее.

Каскадирование тоже приведет к извлечению из исходного файла. В память, но это уже детали. smile


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
LSD
Дата 1.7.2010, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(Skipy @  30.6.2010,  22:19 Найти цитируемый пост)
Каскадирование тоже приведет к извлечению из исходного файла. В память, но это уже детали.

Извлекатся будет небольшой текущий кусочек, нет необходимости предварительно полностью извлекать файл в массив байтов.


--------------------
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   Вверх
Skipy
Дата 1.7.2010, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 6
Всего: 16



Цитата(LSD @ 1.7.2010,  13:04)
Цитата(Skipy @  30.6.2010,  22:19 Найти цитируемый пост)
Каскадирование тоже приведет к извлечению из исходного файла. В память, но это уже детали.

Извлекатся будет небольшой текущий кусочек, нет необходимости предварительно полностью извлекать файл в массив байтов.

Если мне изменяет память, директория в формате ZIP расположена в конце файла. И чтобы на нее спозиционироваться, надо распаковать весь файл, иначе никак.


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
LSD
Дата 1.7.2010, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(Skipy @  1.7.2010,  14:47 Найти цитируемый пост)
Если мне изменяет память, директория в формате ZIP расположена в конце файла. И чтобы на нее спозиционироваться, надо распаковать весь файл, иначе никак.

В ZIP директории отличаются от файлов тем, что у них нет содержимого в виде данных, в остальном они эквивалентны.

Но я говорил о другом, что даже если искомый элемент находится в конце файла нам не нужно выделять память (ни дисковую ни оперативную) на распаковку всего архива.


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

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

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


 




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


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

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