当前位置: 首页 > 知识库问答 >
问题:

在对.gz文件进行解焦距时,已解焦距并创建为本地副本的文件没有.gz可用的原始文件的最后修改时间

拓拔阎宝
2023-03-14

有没有一种方法可以读取tar文件格式的文件的时间戳,以便为未tarred文件设置相同的时间。

例如:Tar文件中有多个文件,我想读取一个文件上次修改的时间戳。

请找到下面使用的代码。

我正在使用apache commons:commons-compress-1.2.jar

import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 

import org.apache.commons.compress.archivers.tar.TarArchiveEntry; 
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; 
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream; 

public class UnTar { 

public static void uncompressTarGZ(File tarFile, File dest) throws IOException { 
dest.mkdir(); 
TarArchiveInputStream tarIn = null; 

tarIn = new TarArchiveInputStream( 
new GzipCompressorInputStream( 
new BufferedInputStream( 
new FileInputStream( 
tarFile 
) 
) 
) 
); 

TarArchiveEntry tarEntry = tarIn.getNextTarEntry(); 

// tarIn is a TarArchiveInputStream 
while (tarEntry != null) {// create a file with the same name as the tarEntry 
System.out.println("********"+tarEntry.getName()); 
File destPath = new File(dest, tarEntry.getName()); 
System.out.println("working: " + destPath.getCanonicalPath()); 
if (tarEntry.isDirectory()) { 
destPath.mkdirs(); 
} else { 
if(destPath.getName().endsWith(".xml") || destPath.getName().endsWith(".tp2")){ 
byte[] header = new byte[10]; 
tarIn.read(header); 
int timestamp = header[4] & 0xFF | 
(header[5] & 0xFF) << 8 | 
(header[6] & 0xFF) << 16 | 
(header[7] & 0xFF) << 24; 

destPath.setLastModified(timestamp); 
destPath.createNewFile(); 
destPath.setLastModified(tarEntry.getLastModifiedDate().getTime()); 
//byte [] btoRead = new byte[(int)tarEntry.getSize()]; 
byte [] btoRead = new byte[1024]; 
//FileInputStream fin 
// = new FileInputStream(destPath.getCanonicalPath()); 
BufferedOutputStream bout = 
new BufferedOutputStream(new FileOutputStream(destPath)); 
int len = 0; 

while((len = tarIn.read(btoRead)) != -1) 
{ 
bout.write(btoRead,0,len); 
} 

bout.close(); 
btoRead = null; 
} 
} 
tarEntry = tarIn.getNextTarEntry(); 
} 
tarIn.close(); 

} 

public static void main(String[] args) throws IOException { 
File tarFile = new File("D:/1_RealDoc_Classic/Work/RDC_927_ReconcileVendor_Util/Production_Samples/FSM_Files/ocwenamf.20150107210002.tar.gz"); 
File dest = new File("D:/1_RealDoc_Classic/Work/RDC_927_ReconcileVendor_Util/Production_Samples/FSM_Files/UnZipped"); 
uncompressTarGZ(tarFile, dest); 
} 

}

共有1个答案

伯逸明
2023-03-14

这个问题还不清楚,但是要将.tar.gz文件的修改时间设置为内存档的文件的最新修改时间,我使用以下方法:

#!/bin/tcsh -f
# set the mod time of a .tar.gz file to the mod time of the latest file within
foreach x ( $* )
  touch -t `tar tvz --full-time -f $x |& egrep -v '^tar' | awk '{ print $4, $5 }' | sort | tail -1 | sed 's/ //g' | sed 's/-//g' | sed 's/://' | sed 's/:/./'` $x
end
 类似资料:
  • 我的 tar 文件位于以下位置: 使用 tar 命令: 命令显示我: 我的计划或更好的愿望是这样处理: 我只想要一个tar文件并将其存储到不同的目录……但是这个带有-C的命令不起作用…它提取tar的所有文件…… 我的问题是,是否可以只提取一个Tar文件,而不将提取到目录中??另一个问题:是否有可能只提取tar文件而不提取文件夹这可能是更好的方法,但我不知道如何。。。? 不,没有路径我就不能保存文件

  • 我们看到ORC和带分区的ORC执行相同(有时我们看到B/W ORC分区和不带分区的ORC差别很小)。带分区的ORC会比ORC表现更好吗。带分区桶的ORC会比ORC分区表现更好吗?。我看到每个ORC分区文件都接近50-100 MB,ORC带外分区(每个文件大小为30-50 MB)。 **注:120 GB的Un压缩数据被压缩为17 GB的ORC文件格式

  • 我在HDFS中有大量. gz文件,我正在尝试使用PigStorage加载它们来处理数据,我得到了以下异常 Java语言io。EOFException:组织的输入流意外结束。阿帕奇。hadoop。io。压紧解压缩流。在org上解压缩(DecompressorStream.java:137)。阿帕奇。hadoop。io。压紧解压缩流。在java上读取(DecompressorStream.java:7

  • 问题内容: 我需要一些帮助来创建文件 我在过去的几个小时中尝试使用RandomAccessFile并尝试实现下一个逻辑: 获取文件对象 创建一个具有相似名称的临时文件(我如何确保将临时文件与给定的原始文件放置在同一位置?) 写入此文件 用临时文件替换磁盘上的原始文件(应使用原始文件名)。 我正在寻找一个简单的代码,谁喜欢使用RandomAccessFile,我只是不正确地解决这几个步骤。 编辑:好

  • gunzip 是一个使用广泛的解压缩命令,它用于解压被 gzip 压缩过的文件(扩展名为 .gz)。 对于解压被 gzip 压缩过的文件,还可以使用 gzip 自己,即 gzip -d 压缩包。 gunzip 命令的基本格式为: [root@localhost ~]# gunzip [选项] 文件 该命令常用的选项及含义如表 1 所示。 表 1 gunzip 命令常用选项及含义 选项 含义 -r

  • 问题内容: 这就是问题所在。我有sample.gz文件,大小约为60KB。我想解压缩该文件的前2000个字节。我遇到了CRC检查失败的错误,我猜是因为gzip CRC字段出现在文件末尾,并且它需要整个gzip压缩文件进行解压缩。有办法解决这个问题吗?我不在乎CRC检查。即使由于CRC错误而无法解压缩,也可以。有没有办法解决这个问题并解压缩部分.gz文件? 我到目前为止的代码是 遇到的错误是 还可以