JAVA文件讀寫(xiě)操作詳解
一、讀文件BufferedInputStream
BufferedInputStream
必須傳入一個(gè)InputStream
(一般是FileInputStream
)
常用方法:
從該輸入流中讀取一個(gè)字節(jié) public int read();
從此字節(jié)輸入流中給定偏移量處開(kāi)始將各字節(jié)讀取到指定的 byte 數(shù)組中。
public int read(byte[] b,int off,int len)
應(yīng)用實(shí)例:
import java.io.BufferedInputStream; import java.io.FileInputStream; /** * BufferedInputStream:緩沖輸入流 * FileInputStream:文件輸入流 */ public class FileReadToString { public static void main(String[] args){ try { FileInputStream fis=new FileInputStream("WynnNi.txt"); BufferedInputStream bis=new BufferedInputStream(fis); String content=null; //自定義緩沖區(qū) byte[] buffer=new byte[10240]; int flag=0; while((flag=bis.read(buffer))!=-1){ content+=new String(buffer, 0, flag); } System.out.println(content); //關(guān)閉的時(shí)候只需要關(guān)閉最外層的流就行了 bis.close(); } catch (Exception e) { e.printStackTrace(); } } }
二、寫(xiě)文件BufferedOutputStream
創(chuàng)建一個(gè)新的緩沖輸出流,以將數(shù)據(jù)寫(xiě)入指定的底層輸出流。
常用方法:
//向輸出流中輸出一個(gè)字節(jié)
public void write(int b);//將指定 byte 數(shù)組中從偏移量 off 開(kāi)始的 len 個(gè)字節(jié)寫(xiě)入此緩沖的輸出流。
public void write(byte[] b,int off,int len);//刷新此緩沖的輸出流。這迫使所有緩沖的輸出字節(jié)被寫(xiě)出到底層輸出流中。
public void flush();
應(yīng)用實(shí)例
/** * BufferedOutputStream:緩沖輸出流 * FileOutPutStream:文件輸出流 */ public class StringOutPutToFile { public static void main(String[] args){ try { FileOutputStream fos=new FileOutputStream("WynnNi.txt"); BufferedOutputStream bos=new BufferedOutputStream(fos); String content="xxxxxxxxx!"; bos.write(content.getBytes(),0,content.getBytes().length); bos.flush(); bos.close(); } catch (Exception e) { e.printStackTrace(); } } }
三、實(shí)際應(yīng)用場(chǎng)景
被調(diào)用方如何將文件傳輸給調(diào)用方并在本地輸出文件
1、被調(diào)用方將文件讀入緩沖區(qū)byte[]
2、將緩沖區(qū)數(shù)據(jù)轉(zhuǎn)換成String傳遞,String str = Base64.getEncoder().encodeToString(bytes);
3、接收方將String反轉(zhuǎn)為byte[],bytes=Base64.getDecoder().decode(str);
4、接收方將緩沖區(qū)輸出到文件
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Java比較器實(shí)現(xiàn)方法項(xiàng)目案例
這篇文章主要介紹了Java比較器實(shí)現(xiàn)方法,結(jié)合具體項(xiàng)目案例形式分析了Java比較器相關(guān)排序操作技巧,需要的朋友可以參考下2019-03-03詳解Kotlin中如何實(shí)現(xiàn)類似Java或C#中的靜態(tài)方法
Kotlin中如何實(shí)現(xiàn)類似Java或C#中的靜態(tài)方法,本文總結(jié)了幾種方法,分別是:包級(jí)函數(shù)、伴生對(duì)象、擴(kuò)展函數(shù)和對(duì)象聲明。這需要大家根據(jù)不同的情況進(jìn)行選擇。2017-05-05詳解Java List的擴(kuò)容機(jī)制原理及應(yīng)用
在Java中,List是一種非常常用的數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)有序的元素集合,本文將分析Java List的擴(kuò)容機(jī)制原理,并通過(guò)示例代碼和測(cè)試代碼來(lái)加強(qiáng)闡述內(nèi)容,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08spring aop之鏈?zhǔn)秸{(diào)用的實(shí)現(xiàn)
這篇文章主要介紹了spring aop之鏈?zhǔn)秸{(diào)用的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02詳解JUC并發(fā)編程中的進(jìn)程與線程學(xué)習(xí)
這篇文章主要為大家詳細(xì)介紹了JUC并發(fā)編程中的進(jìn)程與線程學(xué)習(xí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03Java Socket實(shí)現(xiàn)簡(jiǎn)易聊天室
這篇文章主要為大家詳細(xì)介紹了Java Socket實(shí)現(xiàn)簡(jiǎn)易聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03不規(guī)范使用ThreadLocal導(dǎo)致bug分析解決
這篇文章主要為大家介紹了不規(guī)范使用ThreadLocal導(dǎo)致bug分析解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01