java獲取本地文件和遠(yuǎn)程文件的方式代碼示例
問題背景:
我們項目開發(fā)的時候,經(jīng)常會讀取文件,如果文件在本服務(wù)器,則直接用new File() 讀取即可,但是有時候需要遠(yuǎn)程讀取文件,比如讀取分布式存儲服務(wù)器的內(nèi)容或者是別人家的圖片資源,這個時候new File就無法滿足要求了。
下面提供列出獲取遠(yuǎn)程文件和本地文件的方式
1、獲取遠(yuǎn)程文件
如圖片路徑為 https://kk360.com/user/20230622/gm/30293817365.jpg
import java.net.HttpURLConnection;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
public byte[] getFile(String filePath) {
int HttpResult; // 服務(wù)器返回的狀態(tài)
byte[] bytes = new byte[204800]; //設(shè)置數(shù)組大小
try
{
URL url =new URL(filePath); // 創(chuàng)建URL
URLConnection urlconn = url.openConnection(); // 試圖連接并取得返回狀態(tài)碼
urlconn.connect();
HttpURLConnection httpconn =(HttpURLConnection)urlconn;
HttpResult = httpconn.getResponseCode();
if(HttpResult != HttpURLConnection.HTTP_OK) {
log.error("獲取文件失敗,無法連接到文件資源")
} else {
int filesize = urlconn.getContentLength(); // 取數(shù)據(jù)長度
log.info("取數(shù)據(jù)長度:{}",filesize)
urlconn.getInputStream();
InputStream inputStream = urlconn.getInputStream();
//如果這里只需要返回stream,則直接返回 不需要轉(zhuǎn)byte[]
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
int ch;
while ((ch = inputStream.read()) != -1) {
swapStream.write(ch);
}
bytes = swapStream.toByteArray();
}
log.info("文件大小,length:{}",bytes.length);
}
catch (Exception e) {
log.error("獲取文件異常,e:{}",e);
}
return bytes;
}2、獲取本地文件
File file = new File("/resource/static/sdsadc12.jpg");
InputStream in = null;
try {
// 一次讀多個字節(jié)
byte[] tempbytes = new byte[100];
int byteread = 0;
in = new FileInputStream(file);
// 讀入多個字節(jié)到字節(jié)數(shù)組中,byteread為一次讀入的字節(jié)數(shù)
while ((byteread = in.read(tempbytes)) != -1) {
System.out.write(tempbytes, 0, byteread);
}
log.info("文件大小:{}"+file.length());
} catch (Exception ee) {
log.error("異常:{}",ee);
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e1) {
}
}
}總結(jié)
到此這篇關(guān)于java獲取本地文件和遠(yuǎn)程文件的文章就介紹到這了,更多相關(guān)java獲取本地文件和遠(yuǎn)程文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決springboot的JPA在Mysql8新增記錄失敗的問題
這篇文章主要介紹了解決springboot的JPA在Mysql8新增記錄失敗的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
SpringBoot 編程式事務(wù)使用及兩種實現(xiàn)方式
編程式事務(wù)管理是通過編寫代碼來管理事務(wù),相對于聲明式事務(wù)(@Transactional注解),它提供了更細(xì)粒度的事務(wù)控制,這篇文章主要介紹了SpringBoot 編程式事務(wù)使用及兩種實現(xiàn)方式,需要的朋友可以參考下2024-12-12
SpringBoot + MapStruct 屬性映射工具的使用詳解
MapStruct 是一個代碼生成器,簡化了不同的 Java Bean 之間映射的處理,所謂的映射指的就是從一個實體變化成一個實體。接下來通過本文給大家介紹SpringBoot + MapStruct 屬性映射工具的使用,需要的朋友可以參考下2021-09-09
Java基于Spire.XLS實現(xiàn)從Excel到PDF的發(fā)票自動化生成
隨著業(yè)務(wù)數(shù)字化進(jìn)程的不斷推進(jìn),許多企業(yè)開始嘗試用自動化手段替代手工開票,本文將基于 Spire.XLS for Java 介紹如何快速實現(xiàn)從 Excel 到 PDF的發(fā)票生成自動化方法,感興趣的小伙伴可以了解下2025-06-06

