java tutorial - Сжатие и декомпрессия в Java - учебник java - java programming - учиться java - java basics - java for beginners



1- Чтение запись файла zip используя java.util.zip

  • Для сжатия и извлечения файлов JDK дает вам пакет java.util.zip с некоторыми классами, чтобы сделать это.
  • К сожалению, эта библиотека не может сжимать и извлекать популярные форматы, такие как RAR или 7zip. Для обработки формата rar, 7zip, .. вам нужна другая библиотека. В этом документе я говорю об этих библиотеках, чтобы сделать это.
 java object file
java - джава - учиться java - учебник java -
объект java
- примеры java - java-программы
  • Это изображения ZIP-файла, который открывается с помощью инструмента WinRAR.
 winrar
java - джава - учиться java - учебник java -
WinRAR
- примеры java - java-программы
  • java.util.zip считает эти файлы в zip-файле как ZipEntry.

ListZipEntriesDemo.java

package com.wikitechy.tutorial.javaiozip;
 
import java.io.FileInputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
 
public class ListZipEntriesDemo {
 
    public static void main(String[] args) {
        String FILE_PATH = "C:/test/datas.zip";
 
        ZipInputStream zipIs = null;
        try {
            // Создать объект ZipInputStream для чтения zip файла.
            zipIs = new ZipInputStream(new FileInputStream(FILE_PATH));
 
            ZipEntry entry = null;
            // Просмотр каждого Entry (С верха до низу, до конца)
            while ((entry = zipIs.getNextEntry()) != null) {
                if (entry.isDirectory()) {
                    System.out.print("Directory: ");
                } else {
                    System.out.print("File: ");
                }
                System.out.println(entry.getName());
            }
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                zipIs.close();
            } catch (Exception e) {
            }
        }
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
  • Результат запуска примера:
 list zip enterprise
java - джава - учиться java - учебник java -
list zip enterprise
- примеры java - java-программы
  • Пример извлечения zip-файла в определенную папку:

UnZipDemo.java

package com.wikitechy.tutorial.javaiozip;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
 
public class UnZipDemo {
 
    public static void main(String[] args) {
        final String OUTPUT_FOLDER = "C:/output";
        String FILE_PATH = "C:/test/datas.zip";
 
        // Создать папку Output если она не существует.
        File folder = new File(OUTPUT_FOLDER);
        if (!folder.exists()) {
            folder.mkdirs();
        }
        // Создать buffer (Буфер).
        byte[] buffer = new byte[1024];
 
        ZipInputStream zipIs = null;
        try {
            // Создать объект ZipInputStream для чтения файла из 1 пути (path).
            zipIs = new ZipInputStream(new FileInputStream(FILE_PATH));
 
            ZipEntry entry = null;
            // Просмотр каждого Entry (С верзу до низу, до конца)
            while ((entry = zipIs.getNextEntry()) != null) {
                String entryName = entry.getName();
                String outFileName = OUTPUT_FOLDER + File.separator + entryName;
                System.out.println("Unzip: " + outFileName);
 
                if (entry.isDirectory()) {
                    // Создать папки.
                    new File(outFileName).mkdirs();
                } else {
                    // Создать Stream для записи данных в файл.
                    FileOutputStream fos = new FileOutputStream(outFileName);
 
                    int len;
                    // Чтение данных на текущем Entry.
                    while ((len = zipIs.read(buffer)) > 0) {
                        fos.write(buffer, 0, len);
                    }
 
                    fos.close();
                }
 
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                zipIs.close();
            } catch (Exception e) {
            }
        }
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
  • Результат запуска примера:
 unpack the demo
java - джава - учиться java - учебник java -
Распакуйте демо
- примеры java - java-программы

Сжатие каталога

 data java
java - джава - учиться java - учебник java -
данных java
- примеры java - java-программы

ZipDirectory.java

package com.wikitechy.tutorial.javaiozip;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
 
public class ZipDirectory {
 
    public ZipDirectory() {
 
    }
 
    // Метод для сжатия папки.
    public void zipDirectory(File inputDir, File outputZipFile) {
        // Создать родительскую папку для выходного файла (output file).
        outputZipFile.getParentFile().mkdirs();
 
        String inputDirPath = inputDir.getAbsolutePath();
        byte[] buffer = new byte[1024];
 
        FileOutputStream fileOs = null;
        ZipOutputStream zipOs = null;
        try {
 
            List<File> allFiles = this.listChildFiles(inputDir);
 
            // Создать объект ZipOutputStream для записи zip файла.
            fileOs = new FileOutputStream(outputZipFile);
            // 
            zipOs = new ZipOutputStream(fileOs);
            for (File file : allFiles) {
                String filePath = file.getAbsolutePath();
 
                System.out.println("Zipping " + filePath);
                // entryName: это относительный путь.
                String entryName = filePath.substring(inputDirPath.length() + 1);
 
                ZipEntry ze = new ZipEntry(entryName);
                // Добавить entry в zip файл.
                zipOs.putNextEntry(ze);
                // Чтение данных файла и записать в ZipOutputStream.
                FileInputStream fileIs = new FileInputStream(filePath);
 
                int len;
                while ((len = fileIs.read(buffer)) > 0) {
                    zipOs.write(buffer, 0, len);
                }
                fileIs.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            closeQuite(zipOs);
            closeQuite(fileOs);
        }
 
    }
 
    private void closeQuite(OutputStream out) {
        try {
            out.close();
        } catch (Exception e) {
        }
    }
 
    // Данный метод возвращает список файлов, включая подфайлы ... входной папки
    private List<File> listChildFiles(File dir) throws IOException {
        List<File> allFiles = new ArrayList<File>();
 
        File[] childFiles = dir.listFiles();
        for (File file : childFiles) {
            if (file.isFile()) {
                allFiles.add(file);
            } else {
                List<File> files = this.listChildFiles(file);
                allFiles.addAll(files);
            }
        }
        return allFiles;
    }
 
    public static void main(String[] args) {
        ZipDirectory zipDir = new ZipDirectory();
 
        File inputDir = new File("C:/datas");
        File outputZipFile = new File("C:/output/datas.zip");
 
        zipDir.zipDirectory(inputDir, outputZipFile);
 
    }
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда

Результат запуска примера:

 zip
java - джава - учиться java - учебник java -
zip
- примеры java - java-программы

Чтение запись файла jar используя java.util.jar

 stream java object
java - джава - учиться java - учебник java -
объект java
- примеры java - java-программы
  • В основном чтение, запись файла jar ничем не отличается от чтения, записи Zip-файла.
    • JarInputStream расширяется из ZipInputStream, поддерживает больше методов для чтения информации MANIFEST.
    • JarOutputStream расширяется из ZipOutputStream, поддерживает больше методов для записи информации MANIFEST
  • Обычные файлы библиотеки jar в java имеют очень простую информацию MANIFEST.
  • Например это файл MANIFEST.MF упакованный в файле jar приложения RAP имеющего больше информации:

META-INF/MANIFEST.MF

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: RAPWorkbenchTutorial
Bundle-SymbolicName: RAPWorkbenchTutorial;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: rapworkbenchtutorial.Activator
Require-Bundle: org.eclipse.rap.ui;bundle-version="2.3.0",
org.apache.felix.gogo.command;bundle-version="0.10.0",
org.apache.felix.gogo.runtime;bundle-version="0.10.0",
org.apache.felix.gogo.shell;bundle-version="0.10.0",
org.eclipse.equinox.console;bundle-version="1.1.0",
org.eclipse.equinox.http.jetty;bundle-version="3.0.200",
org.eclipse.equinox.ds;bundle-version="1.4.200",
org.eclipse.rap.rwt.osgi;bundle-version="2.3.0",
org.eclipse.rap.design.example;bundle-version="2.3.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда
  • Например, файл jar открывает с помощью Winrar:
 winrar
java - джава - учиться java - учебник java -
WinRAR
- примеры java - java-программы
  • Объекты в файле jar считаются JarEntry.
 jar entry record
java - джава - учиться java - учебник java -
банку запись
- примеры java - java-программы
  • Простой пример чтения файла MANIFEST файла jar. Ниже приведено изображение содержания простого файла Manifest.
 manifest file java
java - джава - учиться java - учебник java -
файл манифеста Java
- примеры java - java-программы

ReadJarFileDemo.java

package com.wikitechy.tutorial.jar;
 
import java.io.FileInputStream;
import java.util.jar.Attributes;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;
import java.util.jar.Manifest;
 
public class ReadJarFileDemo {
 
    public static void main(String[] args) {
        String FILE_PATH = "C:/DevPrograms/Java/jdk1.7.0_45/lib/dt.jar";
 
        JarInputStream zipIs = null;
        try {
            // Создать объект JarInputStream для чтения jar файлов.
            zipIs = new JarInputStream(new FileInputStream(FILE_PATH));
 
            // Прочитать информацию Manifest:
            Manifest manifest = zipIs.getManifest();
            Attributes atts = manifest.getMainAttributes();
            String version = atts.getValue("Manifest-Version");
            String createdBy = atts.getValue("Created-By");
            System.out.println("Manifest-Version:" + version);
            System.out.println("Created-By:" + createdBy);
            System.out.println("========================");
 
            JarEntry entry = null;
            // Просмотр каждого Entry (С верху до низу, до конца)
            while ((entry = zipIs.getNextJarEntry()) != null) {
                if (entry.isDirectory()) {
                    System.out.print("Folder: ");
                } else {
                    System.out.print("File: ");
                }
                System.out.println(entry.getName());
            }
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                zipIs.close();
            } catch (Exception e) {
            }
        }
    }
 
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда

Результат запуска примера:

 java file read manifest
java - джава - учиться java - учебник java -
java файла Чтение манифеста
- примеры java - java-программы

3- Обработка файла RAR

  • Для работы с RAR-файлом необходима библиотека с открытым исходным кодом. Вы можете использовать одну из следующих библиотек, c хорошей оценкой по убыванию.
 Скачать src
java - джава - учиться java - учебник java -
Скачать src
- примеры java - java-программы
 java unrar
java - джава - учиться java - учебник java -
java unrar
- примеры java - java-программы

Related Searches to Сжатие и декомпрессия в Java