[Основы Java] Сжатие Java Zip: упростите операцию сжатия файлов и папок.
[Основы Java] Сжатие Java Zip: упростите операцию сжатия файлов и папок.

Введение

При разработке Java мы часто сталкиваемся с необходимостью сжимать и распаковывать файлы и папки. Java предоставляет библиотеку сжатия Zip, которая позволяет нам легко сжимать файлы и папки. В этой статье будет подробно представлена ​​функция сжатия Zip в Java и приведен пример кода для демонстрации ее использования.

1. Введение в сжатие Zip

Сжатие Zip — это распространенный формат сжатия файлов, который упаковывает несколько файлов и папок в сжатый пакет с суффиксом .zip. Сжатые файлы позволяют уменьшить объем памяти и размер передачи по сети, а также их можно легко передавать и совместно использовать. Библиотека сжатия Zip Java предоставляет набор API для создания, чтения и распаковки Zip-файлов.

2. Сжатые файлы

Во-первых, давайте посмотрим, как сжимать файлы с помощью библиотеки сжатия Java Zip.

1. Создайте сжатый файл.

Прежде чем приступить к сжатию файла,Нам нужно создатьZipдокумент。Можно использоватьZipOutputStreamкласс для создания новогоZipдокумент,и укажитедокументимя。Создано следующеефайл сжатия Пример кода для:

Язык кода:javascript
копировать
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipExample {
    public static void main(String[] args) {
        String zipFileName = "example.zip";
        
        try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipFileName))) {
            // Добавить файлы в пакет сжатия
            String fileToCompress = "file.txt";
            addToZipFile(fileToCompress, zipOutputStream);
            
            System.out.println("File compressed successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    private static void addToZipFile(String fileName, ZipOutputStream zipOutputStream) throws IOException {
        // Создайте объект ZipEntry и задайте имя файла.
        ZipEntry entry = new ZipEntry(fileName);
        zipOutputStream.putNextEntry(entry);
        
        // Записать содержимое файла в ZIP-файл
        // ...
        
        // Завершить сжатие текущего файла
        zipOutputStream.closeEntry();
    }
}

В приведенном выше примере,Сначала мы создалиZipOutputStreamобъект,и пройти вFileOutputStreamдля письмаZipдокумент。Затем,Мы делаем это, вызываяaddToZipFile()метод потребуетсжатиеиздокументдобавить вZipдокументсередина。

существоватьaddToZipFile()в методе,Мы создалиZipEntryобъект,Установить имя файла,и добавьте его в выходной поток Zip. Следующий,Мы можем записать содержимое файла в Zip-файл.,и позвонивcloseEntry()метод Завершить сжатие текущего файла。

2. Сжатие нескольких файлов

Если вам нужно несколько файлов,Просто нужносуществовать Добавить файлы в пакет сжатия Раньше звонили много разaddToZipFile()метод Вот и все。Ниже приводитсясжатие Несколькодокумент Пример кода для:

Язык кода:javascript
копировать
public class ZipExample {
    public static void main(String[] args) {
        String zipFileName = "example.zip";
        
        try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipFileName))) {
            // Добавить файлы в пакет сжатия
            String[] filesToCompress = {"file1.txt", "file2.txt", "file3.txt"};
            for (String file : filesToCompress) {
                addToZipFile(file, zipOutputStream);
            }
            
            System.out.println("Files compressed successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    // ...
}

В приведенном выше примере мы указываем список файлов, которые необходимо сжать с помощью массива строк. Затем используйте цикл для добавления каждого файла в архив.

3. Сжать папку

Помимо сжатия отдельных файлов, библиотека сжатия Java Zip также может сжимать целые папки. Вот пример кода для архивирования папки:

Язык кода:javascript
копировать
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipExample {
    public static void main(String[] args) {
        String zipFileName = "example.zip";
        String folderToCompress = "folder";
        
        try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipFileName))) {
            // папка сжатие
            compressFolder(folderToCompress, folderToCompress, zipOutputStream);
            
            System.out.println("Folder compressed successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    private static void compressFolder(String sourceFolder, String folderName, ZipOutputStream zipOutputStream) throws IOException {
        File folder = new File(sourceFolder);
        File[] files = folder.listFiles();
        
        if (files != null) {
            for (File file : files) {
                if (file.isDirectory()) {
                    // сжатие подпапки
                    compressFolder(file.getAbsolutePath(), folderName + "/" + file.getName(), zipOutputStream);
                } else {
                    // файл сжатия
                    addToZipFile(folderName + "/" + file.getName(), file.getAbsolutePath(), zipOutputStream);
                }
            }
        }
    }
    
    private static void addToZipFile(String fileName, String fileAbsolutePath, ZipOutputStream zipOutputStream) throws IOException {
        // Создайте объект ZipEntry и задайте имя файла.
        ZipEntry entry = new ZipEntry(fileName);
        zipOutputStream.putNextEntry(entry);
        
        // Прочитайте содержимое файла и запишите в Zip-файл.
        try (FileInputStream fileInputStream = new FileInputStream(fileAbsolutePath)) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = fileInputStream.read(buffer)) != -1) {
                zipOutputStream.write(buffer, 0, bytesRead);
            }
        }
        
        // Завершить сжатие текущего файла
        zipOutputStream.closeEntry();
    }
}

В приведенном выше примере,Мы определилиcompressFolder()метод,для рекурсивнопапка сжатие。Долженметодпринять источникдокументпуть клипа、Путь к текущей папке и выходной поток Zip в качестве параметров.

в методе,Начнем с перечисления всех файлов и подпапок в папке.,Затем обрабатывается каждый файл и подпапка. Если это подпапка,Мы вызываем рекурсивноcompressFolder()метод Приходитьсжатие подпапки。в случаедокумент,Мы звонимaddToZipFile()метод Волядокументдобавить вZipдокументсередина。

3. Разархивируйте файл

Библиотека сжатия Zip Java может использоваться не только для сжатия файлов, но также для распаковки существующих файлов Zip. Ниже мы узнаем, как использовать библиотеку сжатия Zip Java для распаковки файлов.

1. Разархивируйте файл

Чтобы распаковать Zip-файл, нам нужно прочитать содержимое Zip-файла и извлечь его в указанный каталог. Вот пример кода для распаковки файла:

Язык кода:javascript
копировать
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class UnzipExample {
    public static void main(String[] args) {
        String zipFileName = "example.zip";
        String outputFolder = "unzip";
        
        try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFileName))) {
            // развязатьфайл сжатия
            unzipFiles(zipInputStream, outputFolder);
            
            System.out.println("Files unzipped successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    private static void unzipFiles(ZipInputStream zipInputStream, String outputFolder) throws IOException {
        byte[] buffer = new byte[1024];
        ZipEntry entry;
        
        while ((entry = zipInputStream.getNextEntry()) != null) {
            String fileName = entry.getName();
            File outputFile = new File(outputFolder + "/" + fileName);
            
            // Создать папку
            if (entry.isDirectory()) {
                outputFile.mkdirs();
            } else {
                // Создать файл и записать содержимое
                new File(outputFile.getParent()).mkdirs();
                try (FileOutputStream fileOutputStream = new FileOutputStream(outputFile)) {
                    int bytesRead;
                    while ((bytesRead = zipInputStream.read(buffer)) != -1) {
                        fileOutputStream.write(buffer, 0, bytesRead);
                    }
                }
            }
            
            zipInputStream.closeEntry();
        }
    }
}

В приведенном выше примере,Сначала мы создаемZipInputStreamобъект,и пройти вFileInputStreamчитатьZipдокумент。Затем,Мы звонимunzipFiles()метод Приходитьразвязатьфайл сжатия。

существоватьunzipFiles()в методе,Мы используем цикл для чтения записей в Zip-файле одну за другой. Если запись представляет собой папку,Создаем соответствующие папки. если это файл,Мы создаем файл и записываем в него содержимое Zip-записи.

Подвести итог

Из этой статьи мы узнали, как сжимать и распаковывать файлы с помощью библиотеки сжатия Java Zip. Мы узнали, как создавать сжатые файлы, сжимать несколько файлов, сжимать папки и распаковывать файлы. Сжатие Zip — одна из часто используемых файловых операций при разработке Java, которая может упростить операции сжатия и распаковки файлов и папок. Освоение функции сжатия Zip обеспечит вам удобство и эффективность в решении задач, связанных с файлами.

Я надеюсь, что эта статья поможет вам понять и использовать библиотеку сжатия Java Zip. Благодаря практике и исследованиям вы сможете еще больше расширить функции сжатия Zip для удовлетворения более сложных потребностей.

Спасибо за прочтение этой статьи, надеюсь, вы почерпнете из нее ценные знания и опыт! Желаю вам успехов в разработке Java!

boy illustration
RasaGpt — платформа чат-ботов на основе Rasa и LLM.
boy illustration
Nomic Embed: воспроизводимая модель внедрения SOTA с открытым исходным кодом.
boy illustration
Улучшение YOLOv8: EMA основана на эффективном многомасштабном внимании, основанном на межпространственном обучении, и эффект лучше, чем у ECA, CBAM и CA. Малые цели имеют очевидные преимущества | ICASSP2023
boy illustration
Урок 1 серии Libtorch: Тензорная библиотека Silky C++
boy illustration
Руководство по локальному развертыванию Stable Diffusion: подробные шаги и анализ распространенных проблем
boy illustration
Полностью автоматический инструмент для работы с видео в один клик: VideoLingo
boy illustration
Улучшения оптимизации RT-DETR: облегченные улучшения магистрали | Support Paddle облегченный rtdetr-r18, rtdetr-r34, rtdetr-r50, rtdet
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | Деформируемое внимание с большим ядром (D-LKA Attention), большое ядро ​​​​свертки улучшает механизм внимания восприимчивых полей с различными функциями
boy illustration
Создано Datawhale: выпущено «Руководство по тонкой настройке развертывания большой модели GLM-4»!
boy illustration
7B превышает десятки миллиардов, aiXcoder-7B с открытым исходным кодом Пекинского университета — это самая мощная модель большого кода, лучший выбор для корпоративного развертывания.
boy illustration
Используйте модель Huggingface, чтобы заменить интерфейс внедрения OpenAI в китайской среде.
boy illustration
Оригинальные улучшения YOLOv8: несколько новых улучшений | Сохранение исходной информации — алгоритм отделяемой по глубине свертки (MDSConv) |
boy illustration
Второй пилот облачной разработки | Быстро поиграйте со средствами разработки на базе искусственного интеллекта
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция с нулевым кодированием и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
Решенная Ошибка | Загрузка PyTorch медленная: TimeoutError: [Errno 110] При загрузке факела истекло время ожидания — Cat Head Tiger
boy illustration
Brother OCR, библиотека с открытым исходным кодом для Python, которая распознает коды проверки.
boy illustration
Новейшее подробное руководство по загрузке и использованию последней демонстрационной версии набора данных COCO.
boy illustration
Выпущен отчет о крупной модели финансовой отрасли за 2023 год | Полный текст включен в загрузку |
boy illustration
Обычные компьютеры также могут работать с большими моделями, и вы можете получить личного помощника с искусственным интеллектом за три шага | Руководство для начинающих по локальному развертыванию LLaMA-3
boy illustration
Одной статьи достаточно для анализа фактора транскрипции SCENIC на Python (4)
boy illustration
Бросая вызов ограничениям производительности небольших видеокарт, он научит вас запускать большие модели глубокого обучения с ограниченными ресурсами, а также предоставит полное руководство по оценке и эффективному использованию памяти графического процессора!
boy illustration
Команда Fudan NLP опубликовала 80-страничный обзор крупномасштабных модельных агентов, в котором в одной статье представлен обзор текущего состояния и будущего агентов ИИ.
boy illustration
[Эксклюзив] Вы должны знать о новой функции JetBrains 2024.1 «Полнострочное завершение кода», чтобы решить вашу путаницу!
boy illustration
Краткое изложение базовых знаний о регистрации изображений 1.0
boy illustration
Новейшее подробное руководство по установке и использованию библиотеки cv2 (OpenCV, opencv-python) в Python.
boy illustration
Легко создайте локальную базу знаний для крупных моделей на основе Ollama+AnythingLLM.
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание решения. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Одна статья поможет вам понять RAG (Retrival Enhanced Generation) | Введение в концепцию и теорию + практику работы с кодом (включая исходный код).
boy illustration
Эволюция архитектуры шлюза облачной разработки
boy illustration
Docker и Kubernetes [Разработка контейнерных приложений с помощью Python]