Ниже приведен простой пример того, как извлечь ZIP-файл, вам нужно проверить, является ли файл каталогом. Но это самое простое.
Недопустимый шаг: чтение входного потока и запись содержимого в буфер, который записывается в выходной поток.
// Expands the zip file passed as argument 1, into the
// directory provided in argument 2
public static void main(String args[]) throws Exception
{
if(args.length != 2)
{
System.err.println("zipreader zipfile outputdir");
return;
}
// create a buffer to improve copy performance later.
byte[] buffer = new byte[2048];
// open the zip file stream
InputStream theFile = new FileInputStream(args[0]);
ZipInputStream stream = new ZipInputStream(theFile);
String outdir = args[1];
try
{
// now iterate through each item in the stream. The get next
// entry call will return a ZipEntry for each file in the
// stream
ZipEntry entry;
while((entry = stream.getNextEntry())!=null)
{
String s = String.format("Entry: %s len %d added %TD",
entry.getName(), entry.getSize(),
new Date(entry.getTime()));
System.out.println(s);
// Once we get the entry from the stream, the stream is
// positioned read to read the raw data, and we keep
// reading until read returns 0 or less.
String outpath = outdir + "/" + entry.getName();
FileOutputStream output = null;
try
{
output = new FileOutputStream(outpath);
int len = 0;
while ((len = stream.read(buffer)) > 0)
{
output.write(buffer, 0, len);
}
}
finally
{
// we must always close the output file
if(output!=null) output.close();
}
}
}
finally
{
// we must always close the zip file.
stream.close();
}
}
Выдержка кода получена из следующего сайта:
Gnome обеспечивает превосходную библиотеку для этого, названного Бойкий , со многими полезными структурами данных и другими утилитами также.
gnulib, библиотека мобильности гну.
Это распределяется как исходный код. Этот список от список модулей , который включает ТОННУ других вещей. Один интересный является "c-стеком: обработка Переполнения стека, вызывая выход программы".
BSD queue.h имеет:
BSD tree.h имеет:
, Посмотрите очередь (3) и дерево (3) страницы справочника для деталей. Мне действительно нравятся они, потому что они - чистые макросы C без зависимостей (даже libc). Плюс с лицензией BSD Вы не должны волноваться ни о каких ограничениях компании w/GPL.
SGLIB является превосходной универсальной библиотекой структур данных. Библиотека в настоящее время обеспечивает универсальные реализации для:
массивы сортировки
связанные списки
отсортированные связанные списки
двойные связанные списки
красно-черные деревья
хешированные контейнеры
Это очень быстро, быстрее, чем бойкий. Это вдохновлено Стандартной библиотекой шаблонов. Загрузка Здесь
Другое решение программное обеспечение Attractive Chaos . C библиотека макросов:
kbtree.h: эффективная библиотека B-дерева в C.
khash.h: быстро и взвешенная светом библиотека хэш-таблицы в C.
kvec.h: контейнер простого вектора в C.
программное обеспечение Sglib и Attractive Chaos библиотека макросов C. Используя пустоту* для реализации универсальных контейнеров в C может быть неэффективным. C макросы подражает шаблону C++ и так же эффективны как шаблон C++