From 9edb74bdb6dbba934e8dc0caf487541c8b628784 Mon Sep 17 00:00:00 2001 From: Victor Date: Mon, 11 Nov 2013 19:50:16 +0200 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=A03.=20=D0=94=D0=BE=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D0=BD=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5.=20=D0=90=D1=80=D1=85?= =?UTF-8?q?=D0=B8=D0=B2=D0=B0=D1=86=D0=B8=D1=8F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tse/LR_3.java | 2 ++ src/tse/lr3/DirZip.java | 76 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 src/tse/lr3/DirZip.java diff --git a/src/tse/LR_3.java b/src/tse/LR_3.java index a6e9baa..4fc44d1 100644 --- a/src/tse/LR_3.java +++ b/src/tse/LR_3.java @@ -2,6 +2,7 @@ package tse; import tse.lr3.DirCopy; import tse.lr3.DirFindText; +import tse.lr3.DirZip; import tse.lr3.LR_3_Tasks; /** @@ -33,6 +34,7 @@ public class LR_3 implements ILabRab { DirFindText.main(); break; case 4: + DirZip.main(); break; } } diff --git a/src/tse/lr3/DirZip.java b/src/tse/lr3/DirZip.java new file mode 100644 index 0000000..2f8cbed --- /dev/null +++ b/src/tse/lr3/DirZip.java @@ -0,0 +1,76 @@ +package tse.lr3; + +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; + +/** + * + * @author aNNiMON + */ +public class DirZip extends AbstractDirectoryChooser { + + private static final boolean EXTRACT = false; + + public static void main() { + new DirZip().setVisible(true); + } + + private File zipFile; + + public DirZip() { + super("Работа с Zip"); + createFilesAndDirs(); + } + + private void createFilesAndDirs() { + zipFile = new File("E:\\LR_3\\task5.zip"); + } + + @Override + protected void directorySelected(File directory) { + try { + if (EXTRACT) { + + } else { + // Запаковываем + FileOutputStream fos = new FileOutputStream(zipFile); + ZipOutputStream zos = new ZipOutputStream(fos); + zipDirectory(zos, directory.getParent(), directory); + zos.close(); + } + } catch (IOException ex) { + ex.printStackTrace(); + } + } + + private void zipDirectory(ZipOutputStream zos, String sourceDir, File fileSource) throws IOException { + File[] files = fileSource.listFiles(); + for (File file : files) { + if (file.isDirectory()) { + zipDirectory(zos, sourceDir, file); + } else { + byte[] buffer = new byte[1024]; + FileInputStream fin = new FileInputStream(file); + zos.putNextEntry(new ZipEntry(getRelativePath(sourceDir, file))); + int length; + while ( (length = fin.read(buffer)) > 0 ) { + zos.write(buffer, 0, length); + } + zos.closeEntry(); + fin.close(); + } + } + } + + private String getRelativePath(String sourceDir, File file) { + String path = file.getPath().substring(sourceDir.length()); + if (path.startsWith(File.separator)) { + path = path.substring(File.separator.length()); + } + return path; + } +} \ No newline at end of file