JAVA文件讀寫操作詳解
一、讀文件BufferedInputStream
BufferedInputStream必須傳入一個(gè)InputStream(一般是FileInputStream)
常用方法:
從該輸入流中讀取一個(gè)字節(jié) public int read();
從此字節(jié)輸入流中給定偏移量處開始將各字節(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();
}
}
}二、寫文件BufferedOutputStream
創(chuàng)建一個(gè)新的緩沖輸出流,以將數(shù)據(jù)寫入指定的底層輸出流。
常用方法:
//向輸出流中輸出一個(gè)字節(jié)
public void write(int b);//將指定 byte 數(shù)組中從偏移量 off 開始的 len 個(gè)字節(jié)寫入此緩沖的輸出流。
public void write(byte[] b,int off,int len);//刷新此緩沖的輸出流。這迫使所有緩沖的輸出字節(jié)被寫出到底層輸出流中。
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é)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
mybatis引用其他文件中的sql片段的實(shí)現(xiàn)
Mybatis中也是支持引用其他Mapper文件中的SQL片段的,本文就來介紹一下如何使用,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-03-03
解決MyBatis返回結(jié)果類型為Boolean的問題
這篇文章主要介紹了解決MyBatis返回結(jié)果類型為Boolean的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Java中使用回調(diào)函數(shù)的方法實(shí)例
本文主要介紹了Java中使用回調(diào)函數(shù)的方法實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
Java實(shí)現(xiàn)遠(yuǎn)程控制技術(shù)完整源代碼分享
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)遠(yuǎn)程控制技術(shù)完整源代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08
IntelliJ IDEA 中使用jRebel進(jìn)行 Java 熱部署教程圖解
Rebel是一款JAVA虛擬機(jī)插件,它使得JAVA程序員能在不進(jìn)行重部署的情況下,即時(shí)看到代碼的改變對(duì)一個(gè)應(yīng)用程序帶來的影響。本文通過圖文并茂的形式給大家介紹了IntelliJ IDEA 中使用jRebel進(jìn)行 Java 熱部署教程圖解,需要的朋友參考下吧2018-04-04
使用Log4j2代碼方式配置實(shí)現(xiàn)線程級(jí)動(dòng)態(tài)控制
這篇文章主要介紹了使用Log4j2代碼方式配置實(shí)現(xiàn)線程級(jí)動(dòng)態(tài)控制,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12

