February
Думаю, многие встречались с необходимостью распаковывать zip-архивы из программ.
Давайте напишем небольшую утилиту на Java для извлечения фалов из zip-архива. Необходимые нам классы находятся в пакете java.util.zip - это ZipFile и ZipEntry. В примере импорт классов опущен. Итак:
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;
if (args.length != 1) {
System.out.println(“Usage: UnzipUtil <<zipfile>>”);
return;
}
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;
}
Утилиту можно значительно улучшить. Можно проверять существование файлов на диске перед извлечением из архива или же реализовать в утилите интерактивность. Но это уже совсем другая история…
7 Comments »
RSS feed for comments on this post. TrackBack URI
По-больше бы таких статей.
Всё сразу ясно и понятно ![]()
Огромное спасибо за статью по такой непонятно печему редкой теме (или это я гуглом пользоваться не умею?.. :))
а как слздать папку в архиве?
большое спс целый день искал и наконец нашел.
Спасибо большое. Вы мне очень помогли
люди а можно извлечь файлы из RAR не подтверждая пароль??? А то забыл какой поставил
Для создания с директории
File f = new File(entry.getName());
f.mkdir();