美文网首页
报错:java.io.IOException: Error de

报错:java.io.IOException: Error de

作者: Yluozi | 来源:发表于2023-10-30 14:03 被阅读0次

    java解压tar文件使用tarIs.getNextEntry() 方法 总报错:java.io.IOException: Error detected parsing the header

        public static void main(String[] args) {
            String ss = "F:";
    
            try {
    //          File file = new File(ss+File.separator+"test"+File.separator+"infer_result.tar");
    //          InputStream inputStream1 = new FileInputStream(file);
    //          File file1 = new File(ss+File.separator+"test"+File.separator+"moni"+File.separator+"infer_result.tar");
    //          inputStreamToFile(inputStream1,file1);
                log.info("解压缩的csv文件名:"+">>>执行csv文件解析入库操作...");
    
                FileInputStream fis = new FileInputStream(ss+File.separator+"test"+File.separator+"infer_result.tar");
                InputStream inputStream = fis;
                TarArchiveInputStream tarIs = new TarArchiveInputStream(inputStream,"UTF-8");
                tarIs.getCurrentEntry();
                TarArchiveEntry currentEntry = (TarArchiveEntry) tarIs.getNextEntry();
                while (currentEntry != null) {
                    String fileName = currentEntry.getName();
                    File newFile = new File(ss+File.separator+"test"+File.separator+"111" + File.separator + fileName);
                    System.out.println("Extracting to " + newFile.getAbsolutePath());
                    FileOutputStream fos = new FileOutputStream(newFile);
                    byte[] buffer = new byte[1024];
                    int len;
                    while ((len = tarIs.read(buffer)) > 0) {
                        fos.write(buffer, 0, len);
                    }
                    fos.close();
                    currentEntry = (TarArchiveEntry) tarIs.getNextEntry();
                }
                tarIs.close();
                fis.close();
                log.info("解压tar文件成功!");
    
            }catch (Exception e){
                System.out.println(e);
            }
        }
    

    原因:
    TarArchiveInputStream tarIs = new TarArchiveInputStream(inputStream,"UTF-8");
    转码报错,不能直接从InputStream 转 TarArchiveInputStream
    先使用 GzipCompressorInputStream 转一下 gzip的流不报错了

    TarArchiveInputStream tarIs = new TarArchiveInputStream(new GzipCompressorInputStream(fis),"UTF-8");
    

    相关文章

      网友评论

          本文标题:报错:java.io.IOException: Error de

          本文链接:https://www.haomeiwen.com/subject/jppbidtx.html