Io流文件常用工具汇总

2023-10-04  本文已影响0人  Yluozi

1.将流文件转成string

(此方法在再转io时存在解析问题,建议使用FileUtils.readFileToString(file)及平替方法)
import com.alibaba.cloud.commons.io.FileUtils;

    /*将流文件转成string*/
    public static String convertInFtoS(InputStream inputStream) throws IOException {
        // 创建FileInputStream对象
        StringBuilder stringBuilder = new StringBuilder();
        try {
            // 读取文件数据
            int data = 0 ;
            while ((data = inputStream.read()) != -1) {
                System.out.print((char) data);
                stringBuilder.append(data);
            }
            // 关闭输入流
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return stringBuilder.toString();
    }

2.将流文件转换成存放文件

    /*将流文件转换成存放文件*/
    public static FileOutputStream  convertInFtoOutF(InputStream inputStream,String path){
        log.info("将流文件转换成jar文件....");
        try {
            FileOutputStream outputStream = new FileOutputStream(path);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = inputStream.read(buffer)) > 0) {
                // 读取文件流到缓冲区
                outputStream.write(buffer, 0, length);
            }
            inputStream.close();
            outputStream.close();
            return  outputStream;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

3.将InputStream转换为FileInputStream文件

    /*将InputStream转换为FileInputStream文件*/
    public static FileInputStream convertToFileInputStream(InputStream inputStream) throws IOException {
        File tempFile = File.createTempFile("temp", ".tmp");
        tempFile.deleteOnExit();

        try (FileOutputStream outputStream = new FileOutputStream(tempFile)) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }
        }
        return new FileInputStream(tempFile);
    }


4.tar 解压缩

    /*tar 解压缩*/
    public static FileInputStream extractTar(FileInputStream fileInputStream, String destinationFolderPath) throws IOException {
        File outputFile = File.createTempFile("temp", ".tmp");
        try (
                /*压缩包文件目录  String tarFilePath*/
//       FileInputStream fis = new FileInputStream(tarFilePath);
//       BufferedInputStream bis = new BufferedInputStream(fis);
                /*压缩包流文件  InputStream inputStream*/
         BufferedInputStream bis = new BufferedInputStream(fileInputStream);
         TarArchiveInputStream tarInputStream = new TarArchiveInputStream(bis)) {

            TarArchiveEntry tarEntry;
            while ((tarEntry = tarInputStream.getNextTarEntry()) != null) {

//              File outputFile = new File(destinationFolderPath, tarEntry.getName());
                outputFile.deleteOnExit();

                if (tarEntry.isDirectory()) {
                    outputFile.mkdirs();
                } else {
                    outputFile.getParentFile().mkdirs();
                    try (OutputStream outputStream = new FileOutputStream(outputFile)) {
                        byte[] buffer = new byte[4096];
                        int bytesRead;
                        while ((bytesRead = tarInputStream.read(buffer)) != -1) {
                            outputStream.write(buffer, 0, bytesRead);
                        }
                    }
                }
            }
            System.out.println("Tar file extraction completed.");
            return new FileInputStream(outputFile.getPath());

        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("Tar file  is  null.");
        return null;
//      File[] files = outputFile.listFiles();//获取所有子文件夹
//      if (null == files || files.length == 0) {
//          System.out.println("文件夹是空的!");
//          return null;
//      }else{
//          return new FileInputStream(files[0]);
//      }
    }

main 方法


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

import com.alibaba.cloud.commons.io.FileUtils;
import com.alibaba.fastjson.JSON;
import com.opencsv.CSVReader;
import com.opencsv.CSVReaderBuilder;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.*;


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import static com.zznode.jiake.e2e.util.FileUtil.writeTxtFile;

    public static void main(String[] args) {
        String tarFile = "F:\\work\\引入\\infer_result.tar";
        String destDir = "F:\\work\\引入";
        try {
            FileInputStream fileInputStream = new FileInputStream(tarFile);
            /*1 直接拿去本地路径下的jar解压并读取csv文件*/
            FileInputStream fileInputStreamNew =extractTar(convertToFileInputStream(fileInputStream), destDir);
//          doProcessNew(fileInputStreamNew);

            /*2(模拟对端传的string)将本地路径下的文件读取转成流文件的string 再转回,再读取*/
            File file = new File(tarFile);
            String ss =  FileUtils.readFileToString(file);
//          String ss = convertInFtoS(inputStream);
//          System.out.println("");
//          System.out.println("ss resoult====");
//          System.out.println(ss);
//          InputStream inputStreamNew = new ByteArrayInputStream(ss.getBytes(StandardCharsets.UTF_8));
//          extractTar(convertToFileInputStream(inputStreamNew), destDir);


        } catch (IOException e) {
            e.printStackTrace();
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读