conquer0 发表于 2013-2-7 04:28:40

压缩与解压缩类三

/**
   * 返回需压缩目录内文件的相对路径 去除其压缩目录信息 如当前需压缩目录内文件是目录,则返回目录信息
   *
   * @param zipSrcDir 检索路径
   * @param jarfile 需压缩目录内文件
   * @return 截去之后的路径
   */
    private static String getRelativePath(final String zipSrcDir,
            final File jarfile)
    {
      String jarfileName = jarfile.getAbsolutePath();
      if (jarfile.isDirectory())
      {
            // 完善目录,windows:目录以"\"结尾
            if (!jarfileName.endsWith(File.separator))
            {
                jarfileName += File.separatorChar;
            }
      }
      int index = zipSrcDir.lastIndexOf(File.separator);
      final String newString = jarfileName.substring(index + 1);
      final String newRelativeString = newString.replaceAll("\\\\", "/");
      return newRelativeString;
    }
   
    /**
   * 根据传入的zipEntry判断是文件还是路径,如果是文件则创建文件,并将内容写入,否则创建目录
   * @param unZipdir 解压目录
   * @param zipEntry 压缩包条目
   * @param zipStream 压缩包输入流
   * @return 解压目录
   */
    private static ZipEntry createFileOrFolderByZipEntry(final String unZipdir,
            ZipEntry zipEntry, ZipInputStream zipStream)
    {
      final String relativePath = zipEntry.getName();
      final File target = new File(unZipdir, relativePath);
      final File parentFile = target.getParentFile();
      if (!parentFile.exists() && !parentFile.mkdirs())
      {
            throw new RuntimeException("create file failure");
      }
      if (false == zipEntry.isDirectory())
      {
            OutputStream out = null;
            try
            {
                out = new BufferedOutputStream(new FileOutputStream(target));
                writeFile(zipStream, out);
                out.close();
                zipEntry = zipStream.getNextEntry();
            }
            catch (final FileNotFoundException e)
            {
                e.printStackTrace();
            }
            catch (final IOException e)
            {
                e.printStackTrace();
            }
      }
      else
      {
            try
            {
                // 目录不存在则创建目录(解压后的目录)
                if (!target.exists() && !target.mkdirs())
                {
                  throw new RuntimeException("create file failure");
                }
                zipEntry = zipStream.getNextEntry();
            }
            catch (final IOException e)
            {
                e.printStackTrace();
            }
      }
      return zipEntry;
    }
}
页: [1]
查看完整版本: 压缩与解压缩类三