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();
}
}
网友评论