Java 超詳細(xì)講解IO操作字節(jié)流與字符流
IO操作
字節(jié)流
- java.io.InputStream 輸入流,主要是用來讀取文件內(nèi)容的。
- java.io.OutputStream 輸出流,主要是用來將內(nèi)容字節(jié)寫入文件的。
FileInputStream
該流用于從文件讀取數(shù)據(jù),它的對(duì)象可以用關(guān)鍵字 new 來創(chuàng)建。
有多種構(gòu)造方法可用來創(chuàng)建對(duì)象。
可以使用字符串類型的文件名來創(chuàng)建一個(gè)輸入流對(duì)象來讀取文件
InputStream f = new FileInputStream("D:/hello");
也可以使用一個(gè)文件對(duì)象來創(chuàng)建一個(gè)輸入流對(duì)象來讀取文件。我們首先得使用 File() 方法來創(chuàng)建一個(gè)文件對(duì)象:
File f = new File("D:/hello"); InputStream in = new FileInputStream(f);
FileOutputStream
該類用來創(chuàng)建一個(gè)文件并向文件中寫數(shù)據(jù)。
如果該流在打開文件進(jìn)行輸出前,目標(biāo)文件不存在,那么該流會(huì)創(chuàng)建該文件。
有兩個(gè)構(gòu)造方法可以用來創(chuàng)建 FileOutputStream 對(duì)象。
使用字符串類型的文件名來創(chuàng)建一個(gè)輸出流對(duì)象:
OutputStream f = new FileOutputStream("D:/hello");
也可以使用一個(gè)文件對(duì)象來創(chuàng)建一個(gè)輸出流來寫文件。我們首先得使用File()方法來創(chuàng)建一個(gè)文件對(duì)象:
File f = new File("D:/hello"); OutputStream fOut = new FileOutputStream(f);
字節(jié)流讀寫案例
讀取D:/hello.txt文件中的內(nèi)容再輸入到文件D:/test.txt中
public class Mk { public static void main(String[] args) throws IOException { File file=new File("D://hello.txt"); File file1= new File("D://test.txt"); InputStream is=new FileInputStream(file); OutputStream out=new FileOutputStream(file1); //定義byte數(shù)組用來暫存數(shù)據(jù) byte[] buf = new byte[1024]; //讀取Is中的內(nèi)容存到buf is.read(buf); //將buf中的內(nèi)容寫入out out.write(buf); is.close(); out.close(); } }
字符流
FileReader
寫入文件實(shí)例
public class A { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("user.txt", true); fw.write("你好中國1"); fw.write("你好中國2"); fw.write("你好中國3"); fw.close(); } }
FileWriter
讀取文件實(shí)例
這里我把內(nèi)容換行了
br.ready()是判斷這一行流是否為空
br.readLine()是輸出一行,然后自動(dòng)光標(biāo)指到下一行。
public class A { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new FileReader("user.txt")); while (br.ready()) { System.out.println(br.readLine()); } br.close(); } }
字節(jié)流與字符流的區(qū)別
字節(jié)流和字符流使用是非常相似的,那么除了操作代碼的不同之外,還有哪些不同呢?
字節(jié)流在操作的時(shí)候本身是不會(huì)用到緩沖區(qū)(內(nèi)存)的,是與文件本身直接操作的,而字符流在操作的時(shí)候是使用到緩沖區(qū)的 字節(jié)流在操作文件時(shí),即使不關(guān)閉資源(close方法),文件也能輸出,但是如果字符流不使用close方法的話,則不會(huì)輸出任何內(nèi)容,說明字符流用的是緩沖區(qū),并且可以使用flush方法強(qiáng)制進(jìn)行刷新緩沖區(qū),這時(shí)才能在不close的情況下輸出內(nèi)容
那開發(fā)中究竟用字節(jié)流好還是用字符流好呢?
在所有的硬盤上保存文件或進(jìn)行傳輸?shù)臅r(shí)候都是以字節(jié)的方法進(jìn)行的,包括圖片也是按字節(jié)完成,而字符是只有在內(nèi)存中才會(huì)形成的,所以使用字節(jié)的操作是最多的。 如果要java程序?qū)崿F(xiàn)一個(gè)拷貝功能,應(yīng)該選用字節(jié)流進(jìn)行操作(可能拷貝的是圖片),并且采用邊讀邊寫的方式(節(jié)省內(nèi)存)。
到此這篇關(guān)于Java 超詳細(xì)講解IO操作字節(jié)流與字符流的文章就介紹到這了,更多相關(guān)Java IO操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入淺析java web log4j 配置及在web項(xiàng)目中配置Log4j的技巧
這篇文章主要介紹了2015-11-11springboot添加多數(shù)據(jù)源的方法實(shí)例教程
這篇文章主要給大家介紹了關(guān)于springboot添加多數(shù)據(jù)源方法的相關(guān)資料,在實(shí)際開發(fā)中經(jīng)??赡苡龅皆谝粋€(gè)應(yīng)用中可能要訪問多個(gè)數(shù)據(jù)庫多的情況,需要的朋友可以參考下2023-09-09基于Mybatis plus 自動(dòng)代碼生成器的實(shí)現(xiàn)代碼
本文通過實(shí)例代碼給大家介紹了基于Mybatis-plus 自動(dòng)代碼生成器的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05詳解Spring Boot最新版優(yōu)雅停機(jī)的方法
這篇文章主要介紹了Spring Boot最新版優(yōu)雅停機(jī)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10java實(shí)現(xiàn)將字符串中首字母轉(zhuǎn)換成大寫,其它全部轉(zhuǎn)換成小寫的方法示例
這篇文章主要介紹了java實(shí)現(xiàn)將字符串中首字母轉(zhuǎn)換成大寫,其它全部轉(zhuǎn)換成小寫的方法,涉及java字符串遍歷、轉(zhuǎn)換、拼接等相關(guān)操作技巧,需要的朋友可以參考下2019-06-06java遍歷途中修改數(shù)據(jù)及刪除數(shù)據(jù)的方法總結(jié)
在使用java的集合類遍歷數(shù)據(jù)的時(shí)候,在某些情況下可能需要對(duì)某些數(shù)據(jù)進(jìn)行刪除,下面這篇文章主要給大家介紹了關(guān)于java遍歷途中修改數(shù)據(jù)及刪除數(shù)據(jù)的方法總結(jié),需要的朋友可以參考下2023-10-10SpringBoot-application.yml多環(huán)境配置詳解
本文主要介紹了SpringBoot-application.yml多環(huán)境配置詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07