Java压缩正在改变创建文件的日期
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java压缩正在改变创建文件的日期相关的知识,希望对你有一定的参考价值。
我使用了从https://www.mkyong.com/java/how-to-compress-files-in-zip-format/复制的以下代码来创建Zip文件
创建zip文件时,该条目将获取实际创建zip文件的日期。但是我想保留原始文件的日期。我在Mac OS上使用java 1.7
我可以考虑通过读取文件属性来设置zip条目的日期。但这是在拉链时保持日期的正确方法吗?
package org.saurav.simpletests.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class Zipper {
public static void main( String[] args )
{
byte[] buffer = new byte[1024];
try{
FileOutputStream fos = new FileOutputStream("/Users/xxxx/Documents/Work//Data/Zipper/test.zip");
ZipOutputStream zos = new ZipOutputStream(fos);
ZipEntry ze= new ZipEntry("Sonar_Gerrit_Issue.png");
zos.putNextEntry(ze);
FileInputStream in = new FileInputStream("/Users/xxxx/Documents/Work/Data/Zipper/Sonar_Gerrit_Issue.png");
File file = new File("/Users/i054564/Documents/Work/Data/Zipper/Sonar_Gerrit_Issue.png");
int len;;
while ((len = in.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
in.close();
zos.closeEntry();
//remember close it
zos.close();
System.out.println("Done");
}catch(IOException ex){
ex.printStackTrace();
}
}
}
答案
您需要在压缩时设置日期,如下所示:
File file = new File("Sonar_Gerrit_Issue.png");
ZipEntry ze = new ZipEntry(file);
ze.setTime(file.lastModified());
解压缩需要相同:
File file = //unzipping here for ZipEntry ze
file.setLastModified(ze.getTime());
另一答案
由于您使用的是Java 1.7,因此可以使用FileSystem API,这将节省您的时间。
例如:
Path zipFilePath = Paths.get("PathToZip");
try (FileSystem fs = FileSystems.newFileSystem(zipFilePath, null)) {
Path source = new File("pathToSonar_Gerrit_IssuePNG").toPath(); //external file
Path dest = fs.getPath("/Sonar_Gerrit_Issue.png"); //file in the zip
Files.setLastModifiedTime(source, Files.getLastModifiedTime(dest)); //copy modified attribute
Files.copy(source, dest, StandardCopyOption.COPY_ATTRIBUTES ,StandardCopyOption.REPLACE_EXISTING); //copy with replace option
}
注意:替换路径以满足您的需求。
以上是关于Java压缩正在改变创建文件的日期的主要内容,如果未能解决你的问题,请参考以下文章
简短的 tar 脚本:尝试将今天的日期添加到压缩文件名时出现“找不到命令”