今天在用commons-compress-1.9.jar 做tar解压时在while((entry = tar.getNextEntry())!=null){ 出发生异常。异常内容:java.io.IOException: Error detected parsing the header和cause by:java.lang.IllegalArgumentException: Invalid byte 46 at offset 2 in '01.pdf{NUL}�' len=8
检查原因是由于tar文件并不是真正的在linux环境中生成的,而是在windows生成的,所以要处理这个问题,只需要在linux重新tar一次即可。
这里做个记录,以免忘记
public boolean deArchiveFile(File sourcefile,String destPath){ TarArchiveInputStream tar = null; TarArchiveEntry entry = null; BufferedOutputStream bos = null; try { tar = new TarArchiveInputStream(new FileInputStream(sourcefile)); File destFileDir = new File(destPath); if(!destFileDir.exists()){ destFileDir.mkdir(); } while((entry = tar.getNextTarEntry())!=null){ if(entry.isDirectory()){ if(mkNewDir(destPath,entry.getName())){ // destPath=destPath+File.separator+entry.getName(); } }else{ try{ byte b[] = new byte[BUFFER_MAX_SIZE]; bos = new BufferedOutputStream(new FileOutputStream(destPath+File.separator+entry.getName()),BUFFER_MAX_SIZE); int count = 0; while((count = tar.read(b, 0, BUFFER_MAX_SIZE))!=-1){ bos.write(b, 0, count); } }finally{ bos.flush(); bos.close(); } } } return true; } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ if(bos!=null){ try { bos.flush(); bos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return false; }