Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СТП / lec / java2014-lec-10

.pdf
Скачиваний:
8
Добавлен:
03.03.2016
Размер:
1.29 Mб
Скачать

Потоки ввода-вывода (IO Streams)

Часть 2

ZipInputStream/ ZipOutputStream

В Java для чтения/записи zip-архивов применяются классы Zip…Stream

http://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipInputStream.html http://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipOutputStream.html 2

ZipInputStream/ZipOutputStream

http://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipInputStream.html http://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipOutputStream.html 3

ZipEntry

В каждом архиве всегда требуется просматривать отдельные записи (entries)

http://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipEntry.html 4

ZipEntry

http://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipEntry.html 5

Считывание содержимого zip-архива

Метод read класса ZipInputStream изменяется так, чтобы он возвращал «-1» в конце текущей записи (а не просто в конце zip-файла). Далее вызывается метод closeEntry для получения возможности перехода к считыванию следующей записи.

ZipInputStream zin = new ZipInputStream(new FileInputStream(zipName));

ZipEntry entry;

while ((entry = zin.getNextEntry()) != null) {

//анализ entry //считывание содежимого zin.closeEntry();

}

zin.close();

6

Считывание содержимого zip-архива

Для считывания содержимого конкретной записи из Zip-

файла эффективнее использовать не стандартный метод read, а

методы какого-то обладающего большими возможностями потокового фильтра. Например, для считывания текстового

файла, находящегося внутри Zip-архива, можно применить

следующий цикл:

Scanner in = new Scanner(zin); while (in.hasNextLine()) {

//выполнение операций с in.nextLine()

}

7

Запись в zip-архив

Для каждой записи, которую требуется поместить в zip-файл, создается

объект ZipEntry. Желаемое имя для файла передается конструктору

ZipEntry, который устанавливает все параметры. Далее вызывается метод putNextEntry класса ZipOutputStream для начала процесса записи нового файла. После этого данные самого файла отправляются потоку

Zip. По завершении вызывается метод closeEntry. Все эти действия

выполняются для всех файлов, которые требуется сохранить в zip-архиве.

FileOutputStream fout = new FileOutputStream("test.zip"); ZipOutputStream zout = new ZipoutputStream(fout);

// Для всех файлов:

{ZipEntry ze = new ZupEntry("file1.txt"); // имя файла в архиве out.putNextEntry(ze); // отправка данных в поток zout zout.closeEntry();

}

zout.close();

8

Класс RandomAccessFile

RandomAccessFile — класс пакета Java IO API, который

позволяет перемещаться по файлу, читать из него или писать

в него как угодно. Также можно заменить существующие

части файла – речь идет о обновлении содержимого файла, а

точней о обновлении фрагмента файла. Это невозможно сделать с помощью FileInputStream или FileOutputStream,

но RandomAccessFile дает эту возможность.

http://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html 9

Файлы и файловый ввод/вывод

Пакет java.io предназначен для выполнения следующих основных действий:

Создание объектов File

Управление объектами File

Чтение и запись файловых потоков

10

Соседние файлы в папке lec