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