Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Упаковать в zip папку со всеми вложениями / 10 сообщений из 10, страница 1 из 1
01.06.2017, 16:22
    #39463952
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упаковать в zip папку со всеми вложениями
Итак, нашел 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
01.06.2017, 16:31
    #39463958
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упаковать в zip папку со всеми вложениями
BlackeAngelКак решить эти проблемы?
Я так понимаю вариант перестать копипастить код из интернетов и научится программировать не рассматривается?
...
Рейтинг: 0 / 0
01.06.2017, 16:54
    #39463984
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упаковать в zip папку со всеми вложениями
BlazkowiczBlackeAngelКак решить эти проблемы?
Я так понимаю вариант перестать копипастить код из интернетов и научится программировать не рассматривается?
Зачем изобретать велосипед, если есть готовый?
...
Рейтинг: 0 / 0
01.06.2017, 16:58
    #39463989
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упаковать в zip папку со всеми вложениями
Blazkowicz,
Чувствую, тут что то элементарное, но что то понять не могу в какие строки это спряталось.
Хотя вот про создание пустых файлов - ума не приложу причину. Если например, с путями во втором случае понятно, но пока хз как это убить.
...
Рейтинг: 0 / 0
01.06.2017, 20:16
    #39464109
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упаковать в zip папку со всеми вложениями
У меня была задачка поинтереснее. Надо было проиндексировать тучу xml (FB2) книжек.
(Это еще в те веселые времена когда мы с Базистом сравнивали возможности текстовых
индексов и Стебельков). И я упёрся в тот факт что некоторые zip архивы внутри себя
могли содержать другие архивы. Вобщем visitor или iterator по файловой системе выходил
нетривиальный. И я на него подзабил болт.
...
Рейтинг: 0 / 0
01.06.2017, 21:43
    #39464152
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упаковать в zip папку со всеми вложениями
mayton,

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

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

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

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


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