На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Правила раздела Java FAQ
1. Данный раздел предназначен только для публикации готовых статей, с вопросами обращайтесь в соответствующие подразделы.
2. Все вопросы, связанные с ошибками или неточностями в представленных материалах направляйте модераторам персональным сообщением.
3. Все темы и сообщения в разделе премодерируются. Любое сообщение или тема будут доступны остальным участникам после одобрения модераторами.
Модераторы: dark_barker, wind
  
> Простой ZIP-архиватор
    ExpandedWrap disabled
      import java.io.BufferedInputStream;
      import java.io.BufferedOutputStream;
      import java.io.File;
      import java.io.FileInputStream;
      import java.io.FileOutputStream;
      import java.io.IOException;
      import java.io.InputStream;
      import java.io.OutputStream;
      import java.util.zip.ZipEntry;
      import java.util.zip.ZipInputStream;
      import java.util.zip.ZipOutputStream;
       
      public class SimpleArchiver {
       
          static final String CMD_ADD = "add";
          static final String CMD_EXTRACT = "extract";
          static final String CMD_REMOVE = "remove";
          static final String CMD_LIST = "list";
       
          public static void main(String... args) throws IOException {
              if (args.length < 2 || args.length > 3) {
                  System.out.printf(
                      "Usage: SimpleArchiver <command> <zip-filename> [file-to-add-or-remove]\n" +
                      "Commands:\n" +
                      "\tadd - add file to archive\n" +
                      "\textract - extract file from archive\n" +
                      "\tremove - remove file from archive\n" +
                      "\tlist - list files in archive\n");
                  return;
              }
       
              String command = args[0];
              String zipFileName = args[1];
              String fileName = null;
       
              if (args.length == 3) {
                  fileName = args[2];
              }
       
              if (CMD_LIST.equalsIgnoreCase(command)) {
                  list(zipFileName);
                  return;
              }
              else {
                  if (fileName == null) {
                      System.out.println("File not specified\n");
                      return;
                  }
       
                  if (CMD_ADD.equalsIgnoreCase(command)) {
                      add(zipFileName, fileName);
                      return;
                  }
                  else if (CMD_EXTRACT.equalsIgnoreCase(command)) {
                      extract(zipFileName, fileName);
                      return;
                  }
                  else if (CMD_REMOVE.equalsIgnoreCase(command)) {
                      remove(zipFileName, fileName);
                      return;
                  }
              }
       
              System.out.printf("Bad command: %s\n", command);
          }
       
          static void copy(File from, File to) throws IOException {
              InputStream istream = new BufferedInputStream(
                  new FileInputStream(from));
       
              try {
                  OutputStream ostream = new BufferedOutputStream(
                      new FileOutputStream(to));
       
                  try {
                      byte[] buffer = new byte[8192];
                      int readed;
       
                      while ((readed = istream.read(buffer)) > 0) {
                          ostream.write(buffer, 0, readed);
                      }
                  }
                  finally {
                      ostream.close();
                  }
              }
              finally {
                  istream.close();
              }
          }
       
          static void add(String zipFileName, String fileName) throws IOException {
              File zipFile = new File(zipFileName);
              File tmpFile = File.createTempFile("zip", "tmp");
              File newFile = new File(fileName);
       
              byte[] buffer = new byte[8192];
              int readed;
       
              ZipOutputStream zipOutputStream = new ZipOutputStream(
                  new BufferedOutputStream(
                      new FileOutputStream(tmpFile)));
       
              try {
                  if (zipFile.exists()) {
                      ZipInputStream zipInputStream = new ZipInputStream(
                          new BufferedInputStream(
                              new FileInputStream(zipFile)));
       
                      try {
                          ZipEntry entry;
       
                          while ((entry = zipInputStream.getNextEntry()) != null){
                              if (entry.getName().equals(newFile.getName())) {
                                  continue;
                              }
       
                              ZipEntry newEntry = new ZipEntry(entry);
                              zipOutputStream.putNextEntry(newEntry);
       
                              while ((readed = zipInputStream.read(buffer)) > 0) {
                                  zipOutputStream.write(buffer, 0, readed);
                              }
       
                              zipOutputStream.closeEntry();
                          }
                      }
                      finally {
                          zipInputStream.close();
                      }
                  }
       
                  InputStream fileInputStream = new BufferedInputStream(
                      new FileInputStream(newFile));
       
                  try {
                      System.out.printf("Adding %s\n", fileName);
       
                      ZipEntry newEntry = new ZipEntry(newFile.getName());
                      newEntry.setSize(newFile.length());
                      newEntry.setTime(newFile.lastModified());
       
                      zipOutputStream.putNextEntry(newEntry);
       
                      while ((readed = fileInputStream.read(buffer)) > 0) {
                          zipOutputStream.write(buffer, 0, readed);
                      }
       
                      zipOutputStream.closeEntry();
                  }
                  finally {
                      fileInputStream.close();
                  }
              }
              finally {
                  zipOutputStream.close();
              }
       
              if (zipFile.exists()) {
                  zipFile.delete();
              }
       
              tmpFile.renameTo(zipFile);
          }
       
          static void extract(String zipFileName, String fileName) throws IOException {
              File zipFile = new File(zipFileName);
       
              if (!zipFile.exists()) {
                  System.out.printf("Zip file not exists: %s\n", zipFile);
                  return;
              }
       
              ZipInputStream zipInputStream = new ZipInputStream(
                  new BufferedInputStream(
                      new FileInputStream(zipFile)));
       
              try {
                  ZipEntry entry;
       
                  while ((entry = zipInputStream.getNextEntry()) != null){
                      if (entry.getName().equals(fileName)) {
                          System.out.printf("Extracting %s\n", fileName);
       
                          OutputStream fileOutputStream = new BufferedOutputStream(
                              new FileOutputStream(fileName));
       
                          try {
                              byte[] buffer = new byte[8192];
                              int readed;
       
                              while ((readed = zipInputStream.read(buffer)) > 0) {
                                  fileOutputStream.write(buffer, 0, readed);
                              }
                          }
                          finally {
                              fileOutputStream.close();
                          }
                      }
                  }
              }
              finally {
                  zipInputStream.close();
              }
          }
       
          static void remove(String zipFileName, String fileName) throws IOException {
              File zipFile = new File(zipFileName);
       
              if (!zipFile.exists()) {
                  System.out.printf("Zip file not exists: %s\n", zipFile);
                  return;
              }
       
              File tmpFile = File.createTempFile("zip", "tmp");
       
              byte[] buffer = new byte[8192];
              int readed;
       
              ZipOutputStream zipOutputStream = new ZipOutputStream(
                  new BufferedOutputStream(
                      new FileOutputStream(tmpFile)));
       
              try {
                  ZipInputStream zipInputStream = new ZipInputStream(
                      new BufferedInputStream(
                          new FileInputStream(zipFile)));
       
                  try {
                      ZipEntry entry;
       
                      while ((entry = zipInputStream.getNextEntry()) != null){
                          if (entry.getName().equals(fileName)) {
                              System.out.printf("Removing %s\n", fileName);
                              continue;
                          }
       
                          ZipEntry newEntry = new ZipEntry(entry.getName());
                          newEntry.setSize(entry.getSize());
                          newEntry.setTime(entry.getTime());
       
                          zipOutputStream.putNextEntry(newEntry);
       
                          while ((readed = zipInputStream.read(buffer)) > 0) {
                              zipOutputStream.write(buffer, 0, readed);
                          }
       
                          zipOutputStream.closeEntry();
                      }
                  }
                  finally {
                      zipInputStream.close();
                  }
              }
              finally {
                  zipOutputStream.close();
              }
       
              zipFile.delete();
              tmpFile.renameTo(zipFile);
          }
       
          static void list(String zipFileName) throws IOException {
              File zipFile = new File(zipFileName);
       
              ZipInputStream zipInputStream = new ZipInputStream(
                  new BufferedInputStream(
                      new FileInputStream(zipFile)));
       
              try {
                  ZipEntry entry;
       
                  while ((entry = zipInputStream.getNextEntry()) != null){
                      System.out.printf("%s\n", entry.getName());
                  }
              }
              finally {
                  zipInputStream.close();
              }
          }
       
      }
    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script Execution time: 0,0688 ]   [ 14 queries used ]   [ Generated: 23.07.19, 20:49 GMT ]