Java:维护压缩文件修改日期

时间:2012-06-11 15:38:46

标签: java zip unzip

我正在使用的专有程序在解压缩时拉上并提取某些文件而不更改文件的修改日期。我也根据我们程序中的源代码创建自己的zip和提取工具但是当我解压缩文件时,所有压缩文件的修改日期显示为解压缩时间&日期。这是我提取的代码:

public static int unzipFiles(File zipFile, File extractDir) throws Exception 
{
        int totalFileCount = 0;
        String zipFilePath = zipFile.getPath();

        System.out.println("Zip File Path: " + zipFilePath);

        ZipFile zfile = new ZipFile(zipFile); 
        System.out.println("Size of ZipFile: "+zfile.size());

        Enumeration<? extends ZipEntry> entries = zfile.entries(); 

        while (entries.hasMoreElements()) 
        { 
          ZipEntry entry = entries.nextElement(); 
          System.out.println("ZipEntry File: " + entry.getName());
          File file = new File(extractDir, entry.getName()); 
          if (entry.isDirectory()) 
          { 
            System.out.println("Creating Directory");
            file.mkdirs(); 
          } 
          else 
          { 
            file.getParentFile().mkdirs(); 
            InputStream in = zfile.getInputStream(entry); 
            try 
            { 
              copy(in, file); 
            } 
            finally 
            {   
              in.close(); 
            } 
          } 
          totalFileCount++;
        }
        return totalFileCount; 
      } 

private static void copy(InputStream in, OutputStream out) throws IOException 

{

  byte[] buffer = new byte[1024]; 
  System.out.println("InputStream/OutputStram copy");
  while (true) 
  { 
    int readCount = in.read(buffer); 
    if (readCount < 0) 
    { 
      break; 
    } 
    out.write(buffer, 0, readCount); 
   } 
} 

我确信除了执行输入流/输出流复制之外,还有更好的方法可以做到这一点。我确信这是罪魁祸首,因为用winRAR进行提取不会改变我压缩文件的日期。

1 个答案:

答案 0 :(得分:8)

使用ZipEntry.getTime获取上次修改时间,使用File.setLastModified在复制完毕后将其设置在文件中。