⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jzjfile.java

📁 模仿WINDOWS的WINZIP的一款软件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                 if (record.getRootDirectory() != null &&
            (!rootDirectories.contains(record.getRootDirectory()))) {
          rootDirectories.add(record.getRootDirectory());
                 }*/
      }
      isScaned = true;
    }
    catch (IOException e) {
    }
  }

  /**
   * 将指定的项目导出为文件,如果导出目录中已经存在该文件则不会覆盖。
   * @param entryName 需要导出的项目名称
   * @param fileName 导出后的文件名
   */
  public void extractEntryToFile(String entryName, String fileName) {
    extractEntry(entryName, fileName, false);
  }

  /**
   * 将指定的项目导出为文件。
   * @param entryName 需要导出的项目名称
   * @param fileName 导出后的文件名
   * @param overWrite 文件已经存在时是否进行覆盖
   */
  public void extractEntryToFile(String entryName, String fileName,
                                 boolean overWrite) {
    extractEntry(entryName, fileName, overWrite);
  }

  /**
   * 将指定的项目导出为文件。
   * @param entryName 需要导出的项目名称
   * @param fileName 导出后的文件名
   * @param overWrite 文件已经存在时是否进行覆盖
   */
  private void extractEntry(String entryName, String fileName,
                            boolean overWrite) {
    if (FileUtil.isFileExist(fileName) && overWrite == false) {
      return;
    }
    else {
      try {
        ZipInputStream zin = new ZipInputStream(new FileInputStream(selfFile));
        ZipEntry entry;
        while ( (entry = zin.getNextEntry()) != null) {
          if (entry.getName().equals(entryName)) {
            byte[] buf = new byte[4096];
            BufferedInputStream bin = new BufferedInputStream(zin);
            FileUtil.makeDirectory(fileName);
            BufferedOutputStream bout = new BufferedOutputStream(new
                FileOutputStream(fileName));
            while (bin.read(buf, 0, 1) != -1) {
              bout.write(buf, 0, 1);
            }
            bout.close();
            bin.close(); //by barney
          }
          zin.closeEntry();
        }
        zin.close();
      }
      catch (IOException e) {
        logger.error(e.getLocalizedMessage());
      }
    }
  }

  /**
   * 将指定的多个项目分别导出为文件,在已经存在的情况下不进行覆盖。
   * @param entryNames 需要导出的项目名称
   * @param fileNames 导出后的文件名
   */
  public void extractEntriesToFiles(String[] entryNames, String[] fileNames) {
    extractEntries(entryNames, fileNames, false);
  }

  /**
   * 将指定的多个项目分别导出为文件。
   * @param entryNames 需要导出的项目名称
   * @param fileNames 导出后的文件名
   * @param overWrite 文件已经存在时是否进行覆盖
   */
  public void extractEntriesToFiles(String[] entryNames, String[] fileNames,
                                    boolean overWrite) {
    extractEntries(entryNames, fileNames, overWrite);
  }

  /**
   * 将指定的多个项目分别导出为文件。
   * @param entryNames 需要导出的项目名称
   * @param fileNames 导出后的文件名
   * @param overWrite 文件已经存在时是否进行覆盖
   */
  private void extractEntries(String[] entryNames, String[] fileNames,
                              boolean overWrite) {
    try {
      ZipInputStream zin = new ZipInputStream(new FileInputStream(selfFile));
      ZipEntry entry;
      while ( (entry = zin.getNextEntry()) != null) {
        int index = getContainEntry(entry.getName(), entryNames);
        if ( (index != -1) &&
            (overWrite || !FileUtil.isFileExist(fileNames[index]))) {
          byte[] buf = new byte[4096];
          BufferedInputStream bin = new BufferedInputStream(zin);
          FileUtil.makeDirectory(fileNames[index]);
          BufferedOutputStream bout = new BufferedOutputStream(new
              FileOutputStream(fileNames[index]));
          while (bin.read(buf, 0, 1) != -1) {
            bout.write(buf, 0, 1);
          }
          bout.close();
          bin.close(); //by barney
        }
        zin.closeEntry();
      }
      zin.close();
    }
    catch (IOException e) {
      logger.error(e.getLocalizedMessage());
    }
  }

  /**
   * 从压缩包中删除指定的项目。
   * @param entry 要删除的项目名
   */
  public void deleteEntry(String entry) {
    ZipOutputStream zout = null;
    ZipInputStream zin = null;
    File tmpzip = null;
    try {
      tmpzip = File.createTempFile("zip", ".tmp", new File("."));
      zin = new ZipInputStream(new FileInputStream(selfFile));
      zout = new ZipOutputStream(new FileOutputStream(tmpzip));
      ZipEntry ze;
      int len = 0;
      byte[] b = new byte[4096];
      while ( (ze = zin.getNextEntry()) != null) {
        if (ze.getName().equals(entry)) {
          zin.closeEntry();
          count--;
          continue;
        }
        zout.putNextEntry(new ZipEntry(ze.getName()));
        logger.debug(ze.getName());
        while ( (len = zin.read(b)) != -1) {
          zout.write(b, 0, len);
        }
        zout.closeEntry();
        zin.closeEntry();
      }
      zout.close();
      zin.close();
      String slefFileName = selfFile.getPath();
      selfFile.delete();
      tmpzip.renameTo(new File(slefFileName));
      selfFile = new File(slefFileName);
      isChanged = true;
    }
    catch (IOException e) {
      logger.error(e.getLocalizedMessage());
    }
  }

  /**
   * 从压缩包中删除指定的项目。
   * @param entries  要删除的项目名
   */
  public void deleteEntries(String[] entries) {
    ZipOutputStream zout = null;
    ZipInputStream zin = null;
    File tmpzip = null;
    try {
      tmpzip = File.createTempFile("zip", ".tmp", new File("."));
      zin = new ZipInputStream(new FileInputStream(selfFile));
      zout = new ZipOutputStream(new FileOutputStream(tmpzip));
      ZipEntry ze;
      int len = 0;
      byte[] b = new byte[4096];
      while ( (ze = zin.getNextEntry()) != null) {
        if (getContainEntry(ze.getName(), entries) != -1) {
          zin.closeEntry();
          count--;
          continue;
        }
        zout.putNextEntry(new ZipEntry(ze.getName()));
        while ( (len = zin.read(b)) != -1) {
          zout.write(b, 0, len);
        }
        zout.closeEntry();
        zin.closeEntry();
      }
      zout.close();
      zin.close();
      String slefFileName = selfFile.getPath();
      selfFile.delete();
      tmpzip.renameTo(new File(slefFileName));
      selfFile = new File(slefFileName);
      isChanged = true;
    }
    catch (IOException e) {
      logger.error(e.getLocalizedMessage());
    }
  }

  /**
   * 得到压缩包的文件名。
   * @return 压缩包的文件名
   */
  public String getName() {
    return selfFile.getName();
  }

  /**
   * 得到压缩包的全文件名,即绝对路径名。
   * @return 压缩包的全文件名
   */
  public String getFullName() {
    return selfFile.getAbsolutePath();
  }

  /**
   * 得到压缩包所在的目录的目录名。
   * @return 压缩包所在的目录的目录名
   */
  public String getParentPath() {
    return selfFile.getParent();
  }

  /**
   * 得到压缩包中的所有项目的枚举。
   * @return 压缩包中的所有项目的枚举
   */
  public Iterator entries() {
    return entries.iterator();
  }

  /**
   * 得到压缩包中的所有项目的项目名的数组。
   * @return 压缩包中的所有项目的项目名的数组
   */
  public String[] getEntryNames() {
    String[] names = new String[this.entries.size()];
    Iterator entries = entries();
    int i = 0;
    while (entries.hasNext()) {
      names[i++] = (String) ( ( (JZJFileRecord) entries.next()).get(0));
    }
    return names;
  }

  /**
   * 得到压缩包中的所有项目的项目的数组。
   * @return 压缩包中的所有项目的项目的数组
   */
  public JZJFileRecord[] getEntries() {
    JZJFileRecord[] records = new JZJFileRecord[count];
    for (int i = 0; i < records.length; i++) {
      records[i] = (JZJFileRecord) entries.get(i);
    }
    return records;
  }

  /**
   * 得到压缩包中的所有根项目的枚举。
   * @return 压缩包中的所有根项目的枚举
   */
  /*public Iterator rootEntries() {
    return rootEntries.iterator();
     }*/
  /**
   * 得到压缩包中的所有根项目的项目名的数组。
   * @return 压缩包中的所有根项目的项目名的数组
   */
  /*public String[] getRootEntryNames() {
    String[] names = new String[rootEntries.size()];
    Iterator rootEntries = rootEntries();
    int i = 0;
    while (rootEntries.hasNext()) {
      names[i++] = (String) ( ( (JZJFileRecord) rootEntries.next()).get(
          "name"));
    }
    return names;
     }*/
  /**
   * 得到压缩包中的所有根项目目录的枚举。
   * @return 压缩包中的所有根项目目录的枚举
   */
  /*public Iterator rootDirectoryEntries() {
    return rootDirectories.iterator();
     }*/
  /**
   * 得到压缩包中的所有根项目目录名的数组。
   * @return 压缩包中的所有根项目目录名的数组
   */
  /*public String[] getRootDirectoryNames() {
    String[] names = new String[rootDirectories.size()];
    Iterator rootDirectories = rootDirectoryEntries();
    int i = 0;
    while (rootDirectories.hasNext()) {
      names[i++] = (String) rootDirectories.next();
    }
    return names;
     }*/
  /**
   * 判断两个项目是否相同。
   * @param one 项目一
   * @param two 项目二
   * @return 如果两个项目的项目名相同则返回true,否则返回false
   */
  private boolean isSameEntry(ZipEntry one, ZipEntry two) {
    return one.getName().equals(two.getName());
  }

  /**
   * 判断在项目数组中是否存在指定的项目。
   * @param one 指定的项目
   * @param others 项目数组
   * @return 存在返回true,否则返回false
   */
  private boolean isContainEntry(ZipEntry one, ZipEntry[] others) {
    for (int i = 0; i < others.length; i++) {
      if (isSameEntry(one, others[i])) {
        return true;
      }
    }
    return false;
  }

  /**
   * 得到指定项目在项目数组中的索引。
   * @param one 指定项目
   * @param others 项目数组
   * @return 指定项目在项目数组中的索引,不存在时返回-1
   */
  private int getContainEntry(String one, String[] others) {
    for (int i = 0; i < others.length; i++) {
      if (one.equals(others[i])) {
        return i;
      }
    }
    return -1;
  }

  /**
   * 如果自身代表的压缩包不存在则创建一个新文件。
   */
  private void createNewFile() {
    if (!selfFile.exists()) {
      try {
        selfFile.createNewFile();
      }
      catch (IOException e) {
      }
    }
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -