在java中如何將inputStream對象轉(zhuǎn)換為File對象(不生成本地文件)
需求說明
在后端中通過POI生成Excel文件流,將輸出流(outputStream)轉(zhuǎn)為輸入流(inputStream)后又需要將輸入流(inputStream)轉(zhuǎn)為File對象
問題:如果需要將輸入流(inputStream)轉(zhuǎn)為File對象,則必須要根據(jù)本地路徑去生成一個File對象才行,也就是說不管怎樣本地都必須要生成出來一個文件
問題解決
在經(jīng)過一系列的資料查詢后,發(fā)現(xiàn)如下方式可以大致滿足需求
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";//后綴字符串定義文件的擴(kuò)展名;如果為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;
}
}我們運(yùn)行以上程序后tempFile即為我們需要的File對象。
看到這里你可能會好奇,這不是也在本地生成了個文件嗎?
但是它生成的文件位置是存儲在以下的(計(jì)算機(jī)的臨時文件目錄中),所以可以看成沒有在本地生成文件:
C:\Users\TP\AppData\Local\Temp\tmp2447618135336474361.txt
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
- java中InputStream轉(zhuǎn)為MultipartFile的解決方案
- Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=111
- Java IO流操作(PipeInputStream、SequenceInputStream、BufferedInputStream)
- Java中的轉(zhuǎn)換流InputStreamReader解讀
- Java中的ByteArrayInputStream詳解
- java用字節(jié)數(shù)組解決FileInputStream讀取漢字出現(xiàn)亂碼問題
- Java中語音url轉(zhuǎn)換成InputStream的示例代碼
相關(guān)文章
使用Mock進(jìn)行業(yè)務(wù)邏輯層Service測試詳解
這篇文章主要介紹了使用Mock進(jìn)行業(yè)務(wù)邏輯層Service測試詳解,mock是一種模擬對象的技術(shù),用于在測試過程中替代真實(shí)的對象,通過mock,我們可以控制被模擬對象的行為和返回值,以便進(jìn)行更加精確的測試,需要的朋友可以參考下2023-08-08
springboot?去掉netflix?禁用Eureka的解決方法
這篇文章主要介紹了springboot?去掉netflix?禁用Eureka的解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09
SpringBoot開發(fā)實(shí)戰(zhàn)系列之動態(tài)定時任務(wù)
在我們?nèi)粘5拈_發(fā)中,很多時候,定時任務(wù)都不是寫死的,而是寫到數(shù)據(jù)庫中,從而實(shí)現(xiàn)定時任務(wù)的動態(tài)配置,下面這篇文章主要給大家介紹了關(guān)于SpringBoot開發(fā)實(shí)戰(zhàn)系列之動態(tài)定時任務(wù)的相關(guān)資料,需要的朋友可以參考下2021-08-08

