java獲取本地文件和遠(yuǎn)程文件的方式代碼示例
問題背景:
我們項(xiàng)目開發(fā)的時(shí)候,經(jīng)常會讀取文件,如果文件在本服務(wù)器,則直接用new File() 讀取即可,但是有時(shí)候需要遠(yuǎn)程讀取文件,比如讀取分布式存儲服務(wù)器的內(nèi)容或者是別人家的圖片資源,這個(gè)時(shí)候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 { // 一次讀多個(gè)字節(jié) byte[] tempbytes = new byte[100]; int byteread = 0; in = new FileInputStream(file); // 讀入多個(gè)字節(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)文章
Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(23)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07java JDBC系列教程之JDBC類的簡析與JDBC的基礎(chǔ)操作
這篇文章主要介紹了java JDBC系列教程之JDBC類的簡析與JDBC的基礎(chǔ)操作,本文分步驟通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07SpringAOP中基于注解實(shí)現(xiàn)通用日志打印方法詳解
這篇文章主要介紹了SpringAOP中基于注解實(shí)現(xiàn)通用日志打印方法詳解,在日常開發(fā)中,項(xiàng)目里日志是必不可少的,一般有業(yè)務(wù)日志,數(shù)據(jù)庫日志,異常日志等,主要用于幫助程序猿后期排查一些生產(chǎn)中的bug,需要的朋友可以參考下2023-12-12Spring?@Scheduled定時(shí)器注解使用方式
這篇文章主要介紹了Spring?@Scheduled定時(shí)器注解使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08