Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБОРАТОРНАЯ РАБОТА1.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
111.1 Кб
Скачать

1.2.2.1Класс ZipFile

В классе ZipFile определены несколько методов, Приведенных в таблицу 1.1.

Таблица 1.1 – Методы класса ZipFile

Метод

Описание

entries()

Возвращает перечисление объектов, хранящихся в архивной библиотеке формата ZIP

getName()

Возвращает имя ZIP-файла

getInputStream()

Возвращает ссылку на входной поток для чтения объектов их архива

getEntry()

Возвращает объект, хранящийся в библиотеке, по его имени

close()

Закрывает ZIP-файл

Методы entries() и getEntry() позволяют получить элементы, хранящиеся в архиве, как объекты класса ZipEntry. Ниже приведен пример получения перечисления таких объектов:

Enumeration en = zf.entries();

Чтобы извлечь элементы перечисления и записать их в массив zipEntries класса Vector, мы можем создать цикл:

while(en.hasMoreElements())

{

zipEntries.addElement((ZipEntry)en.nextElement());

}

1.2.2.2Класс ZipEntry

В классе ZipEntry определены две константы, конструктор и несколько методов.

Константы обозначают использованный метод компрессии (сжатия):

public static final int STORED;

public static final int DEFLATED;

Если файл сохранен в архиве без компрессии, для него используется метод ZipEntry.STORED, а если с компрессией – метод ZipEntry.DEFLATED.

Конструктор класса ZipEntry позволяет создать новый элемент оглавления архива с заданным именем:

public ZipEntry(String name);

Что же касается методов класса ZipEntry, то их можно разделить на две группы, одна из которых предназначена для установки атрибутов элемента оглавления архива ZIP, а другая – для извлечения. Описание методов приведено в таблице 1.2.

Таблица 1.2 – Методы класса ZipEntry

Метод

Описание

public void setCrc(long crc);

Позволяет установить значение контрольной суммы для несжатого файла, описываемого данным элементом оглавления архива. Для вычисления контрольной суммы применяется алгоритм CRC-32.

public long getCrc();

Предназначен для извлечения контрольной суммы, записанной в элемент оглавления.

public void setMethod(int method);

С помощью этого метода можно установить режим добавления файла в архив – с компрессией или без компрессии. В первом случае методу необходимо передать значение ZipEntry.DEFLATED, а во втором – значение ZipEntry.STORED.

public int getMethod();

Метод getMethod позволяет узнать способ компрессии, который был использован для файла, соответствующего данному элементу архива. Он может возвращать значения ZipEntry.DEFLATED или ZipEntry.STORED.

public void setExtra(byte extra[]);

С помощью этого метода можно записать в элемент оглавления архива произвольную дополнительную информацию.

public byte[] getExtra();

Метод getExtra возвращает дополнительную информацию, записанную в элементе оглавления архива.

public void setComment(String comment);

Запись в элемент оглавления архива дополнительной текстовой строки комментария.

public String getComment();

Чтение строки комментария.

public long getCompressedSize();

Возвращает размер сжатого файла или значение -1, если этот размер неизвестен.

public boolean isDirectory();

Помимо файлов, в архиве могут храниться каталоги. В этом случае имя соответствующего элемента должно оканчиваться символом "/". Метод isDirectory позволяет узнать, является ли данные элемент описателем каталога или файла. В первом случае он возвращает значение true, а во втором – false.

public String getName();

Этот метод позволяет узнать имя, соответствующее данному элементу оглавления архива. Изменить имя нельзя – оно передается конструктору класса ZipEntry при создании нового элемента оглавления.

public void setTime(long time);

Установка времени модификации файла (в количестве миллисекунд, прошедших с начала эпохи).

public long getTime();

Определение времени модификации файла.

public void setSize(long size);

Установка размера несжатого файла.

public long getSize();

Определение размера несжатого файла.

Ниже приводится пример класса, который демонстрирует, как можно извлечь содержимое Zip-архива.

public class UnzipUtil {

public static void write(InputStream in, OutputStream out)

throws IOException {

byte[] buffer = new byte[1024];

int len;

while ((len = in.read(buffer)) >= 0)

out.write(buffer, 0, len);

in.close();

out.close();

}

public static void main(String[] args) {

Enumeration entries = null;

ZipFile zip = null;

try {

zip = new ZipFile(args[0]);

entries = zip.entries();

while (entries.hasMoreElements()) {

ZipEntry entry = (ZipEntry) entries.nextElement();

System.out.println("Extracting:" + entry.getName());

write(zip.getInputStream(entry),

new BufferedOutputStream (new

FileOutputStream(entry.getName())));

}

zip.close();

}

catch (IOException e) {

System.out.println("Exception:");

e.printStackTrace();

return;

}

}

}

Имя архива передается аргументом в утилиту. Метод entries() получает перечисление объектов в архиве. Метод write() записывает содержимое объекта в некоторый файл. Данный пример пригоден для архивов без вложенных директорий. Чтобы обрабатывать директории необходимо добавить строки:

if (entry.isDirectory()) {

// создание папки и т.д.

continue;

}