欧亿体育
工作动态
我的位置: 首页 > 工作动态
在java中将inputStream对象转换为File对象(不生成本地文件)
发布时间:2024-01-21 16:04
  |  
阅读量:
  |  
作者:
欧亿体育

需求说明

在后端中通过POI生成Excel文件流,将输出流(outputStream)转为输入流(inputStream)后又需要将输入流(inputStream)转为File对象

问题:如果需要将输入流(inputStream)转为File对象,则必须要根据本地路径去生成一个File对象才行,也就是说不管怎样本地都必须要生成出来一个文件

问题解决

在经过一系列的资料查询后,发现如下方式可以大致满足需求

import org.apache.commons.io.IOUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class StreamUtil {
    static final String PREFIX = "stream2file";//前缀字符串定义文件名;必须至少三个字符
    static final String SUFFIX = ".tmp";//后缀字符串定义文件的扩展名;如果为null,则将使用后缀".tmp"
    public static File stream2file (InputStream in) throws IOException {
        final File tempFile = File.createTempFile(PREFIX, SUFFIX);
        tempFile.deleteOnExit();
        try (FileOutputStream out = new FileOutputStream(tempFile)) {
            IOUtils.copy(in, out);
        }
        return tempFile;
    }
}

我们运行以上程序后tempFile即为我们需要的File对象。

看到这里你可能会好奇,这不是也在本地生成了个文件吗?但是它生成的文件位置是存储在以下的(计算机的临时文件目录中),所以可以看成没有在本地生成文件:

C:\Users\TP\AppData\Local\Temp\tmp2447618135336474361.txt