powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Упаковать в zip папку со всеми вложениями
10 сообщений из 10, страница 1 из 1
Упаковать в zip папку со всеми вложениями
    #39463952
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Итак, нашел 2 метода упаковки папок в архив. НО оба с ошибками:
В первом создает файлы размером 0 байт с именем любого каталога:
[
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
code][java]
public static void zipDirectory(File dir, File zipFile) throws IOException {
     FileOutputStream fout = new FileOutputStream(zipFile);
     ZipOutputStream zout = new ZipOutputStream(fout);
     zipSubDirectory("", dir, zout);
     zout.close();
 }
    private static void zipSubDirectory(String basePath, File dir, ZipOutputStream zout) throws IOException {
        byte[] buffer = new byte[8000];
        File[] files = dir.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                String path = basePath + file.getName() + "/";
                zout.putNextEntry(new ZipEntry(path));
                zipSubDirectory(path, file, zout);
                zout.closeEntry();
            } else {
                FileInputStream fin = new FileInputStream(file);
                zout.putNextEntry(new ZipEntry(basePath + file.getName()));
                int length;
                while ((length = fin.read(buffer)) > 0) {
                    zout.write(buffer, 0, length);
                }
                zout.closeEntry();
                fin.close();
            }
        }
    }

[/java]
[/SRC]
Второй упаковывает как надо, без призраков, НО - берет лишнюю коневую папку
(вместо 1/2/3 делает tmp/1/2/3)
[
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
code][java]
    public static void arhivedir(String zip, String folder) throws Exception {
        FileOutputStream fos = new FileOutputStream(zip);
        ZipOutputStream zos = new ZipOutputStream(fos);
        addDirToZipArchive(zos, new File(folder), null);
        zos.flush();
        fos.flush();
        zos.close();
        fos.close();
    }
    public static void addDirToZipArchive(ZipOutputStream zos, File fileToZip, String parrentDirectoryName) throws Exception {
        if (fileToZip == null || !fileToZip.exists()) {
            return;
        }
        String zipEntryName = fileToZip.getName();
        if (parrentDirectoryName!=null && !parrentDirectoryName.isEmpty()) {
            zipEntryName = parrentDirectoryName + "/" + fileToZip.getName();
        }
        if (fileToZip.isDirectory()) {
            System.out.println("+" + zipEntryName);
            for (File file : fileToZip.listFiles()) {
                addDirToZipArchive(zos, file, zipEntryName);
            }
        } else {
            System.out.println("   " + zipEntryName);
            byte[] buffer = new byte[4096];
            FileInputStream fis = new FileInputStream(fileToZip);
            zos.putNextEntry(new ZipEntry(zipEntryName));
            int length;
            while ((length = fis.read(buffer)) > 0) {
                zos.write(buffer, 0, length);
            }
            zos.closeEntry();
            fis.close();
        }
    }

[/java[/SRC]]
Как решить эти проблемы?
...
Рейтинг: 0 / 0
Упаковать в zip папку со всеми вложениями
    #39463958
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngelКак решить эти проблемы?
Я так понимаю вариант перестать копипастить код из интернетов и научится программировать не рассматривается?
...
Рейтинг: 0 / 0
Упаковать в zip папку со всеми вложениями
    #39463984
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczBlackeAngelКак решить эти проблемы?
Я так понимаю вариант перестать копипастить код из интернетов и научится программировать не рассматривается?
Зачем изобретать велосипед, если есть готовый?
...
Рейтинг: 0 / 0
Упаковать в zip папку со всеми вложениями
    #39463989
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
Чувствую, тут что то элементарное, но что то понять не могу в какие строки это спряталось.
Хотя вот про создание пустых файлов - ума не приложу причину. Если например, с путями во втором случае понятно, но пока хз как это убить.
...
Рейтинг: 0 / 0
Упаковать в zip папку со всеми вложениями
    #39464109
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня была задачка поинтереснее. Надо было проиндексировать тучу xml (FB2) книжек.
(Это еще в те веселые времена когда мы с Базистом сравнивали возможности текстовых
индексов и Стебельков). И я упёрся в тот факт что некоторые zip архивы внутри себя
могли содержать другие архивы. Вобщем visitor или iterator по файловой системе выходил
нетривиальный. И я на него подзабил болт.
...
Рейтинг: 0 / 0
Упаковать в zip папку со всеми вложениями
    #39464152
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

рекурсивный итератор ! (:

Хотя такое вряд ли возможно ))
...
Рейтинг: 0 / 0
Упаковать в zip папку со всеми вложениями
    #39464154
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usmanрекурсивный итератор ! (:

Хотя такое вряд ли возможно ))
почему? и в чем сложность?
...
Рейтинг: 0 / 0
Упаковать в zip папку со всеми вложениями
    #39464159
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevпочему?решение в лоб: итератор возращает другой итератор, если наткнулся на zip-файлLeonid Kudryavtsevи в чем сложность?в реализации
...
Рейтинг: 0 / 0
Упаковать в zip папку со всеми вложениями
    #39464173
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usmanв реализации
Насколько я помню учебники 15-20 летний давности, любой рекурсивный алгоритм можно преобразовать в алгоритм использующий стек

Т.ч. сложности реализации не вижу, другое дело, что я сначала бы создал нормальную рекурсивную функцию обхода, а потом уже готовую функцию переводил в вариант использующий стек. Мне так было бы проще.
...
Рейтинг: 0 / 0
Упаковать в zip папку со всеми вложениями
    #39465095
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итерирование элементов zip-архива - чтение заголовка.
Итерирование элементов вложенного zip-архива - чтение заголовков распакованного файла. Допускает оптимизацию в частном, но весьма вероятном случае.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Упаковать в zip папку со всеми вложениями
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]