3

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

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 进行提取不会更改我压缩文件的日期。

4

1 回答 1

10

完成复制后,使用 ZipEntry.getTime 获取上次修改时间,并使用 File.setLastModified 在文件上设置它。

于 2012-06-11T15:46:02.767 回答