2
February

Как извлечь файлы из архива (zip и java)

Posted in: Java technologies, J2SE |

Думаю, многие встречались с необходимостью распаковывать 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;
  }

Утилиту можно значительно улучшить. Можно проверять существование файлов на диске перед извлечением из архива или же реализовать в утилите интерактивность. Но это уже совсем другая история…

6 Comments »

RSS feed for comments on this post. TrackBack URI



avn
May 5, 2006 #

По-больше бы таких статей.
Всё сразу ясно и понятно :)

YuM
May 30, 2006 #

Огромное спасибо за статью по такой непонятно печему редкой теме (или это я гуглом пользоваться не умею?.. :))

Serj
November 2, 2006 #

а как слздать папку в архиве?

lsr
April 13, 2007 #

большое спс целый день искал и наконец нашел.

Dmitri
February 17, 2008 #

Спасибо большое. Вы мне очень помогли

ljp
May 20, 2008 #

люди а можно извлечь файлы из RAR не подтверждая пароль??? А то забыл какой поставил

Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>