Java 超詳細(xì)講解IO操作字節(jié)流與字符流
IO操作

字節(jié)流
- java.io.InputStream 輸入流,主要是用來讀取文件內(nèi)容的。
- java.io.OutputStream 輸出流,主要是用來將內(nèi)容字節(jié)寫入文件的。
FileInputStream
該流用于從文件讀取數(shù)據(jù),它的對象可以用關(guān)鍵字 new 來創(chuàng)建。
有多種構(gòu)造方法可用來創(chuàng)建對象。
可以使用字符串類型的文件名來創(chuàng)建一個輸入流對象來讀取文件
InputStream f = new FileInputStream("D:/hello");
也可以使用一個文件對象來創(chuàng)建一個輸入流對象來讀取文件。我們首先得使用 File() 方法來創(chuàng)建一個文件對象:
File f = new File("D:/hello");
InputStream in = new FileInputStream(f);
FileOutputStream
該類用來創(chuàng)建一個文件并向文件中寫數(shù)據(jù)。
如果該流在打開文件進(jìn)行輸出前,目標(biāo)文件不存在,那么該流會創(chuàng)建該文件。
有兩個構(gòu)造方法可以用來創(chuàng)建 FileOutputStream 對象。
使用字符串類型的文件名來創(chuàng)建一個輸出流對象:
OutputStream f = new FileOutputStream("D:/hello");
也可以使用一個文件對象來創(chuàng)建一個輸出流來寫文件。我們首先得使用File()方法來創(chuàng)建一個文件對象:
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
寫入文件實例
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
讀取文件實例
這里我把內(nèi)容換行了

br.ready()是判斷這一行流是否為空
br.readLine()是輸出一行,然后自動光標(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é)流在操作的時候本身是不會用到緩沖區(qū)(內(nèi)存)的,是與文件本身直接操作的,而字符流在操作的時候是使用到緩沖區(qū)的 字節(jié)流在操作文件時,即使不關(guān)閉資源(close方法),文件也能輸出,但是如果字符流不使用close方法的話,則不會輸出任何內(nèi)容,說明字符流用的是緩沖區(qū),并且可以使用flush方法強(qiáng)制進(jìn)行刷新緩沖區(qū),這時才能在不close的情況下輸出內(nèi)容
那開發(fā)中究竟用字節(jié)流好還是用字符流好呢?
在所有的硬盤上保存文件或進(jìn)行傳輸?shù)臅r候都是以字節(jié)的方法進(jìn)行的,包括圖片也是按字節(jié)完成,而字符是只有在內(nèi)存中才會形成的,所以使用字節(jié)的操作是最多的。 如果要java程序?qū)崿F(xiàn)一個拷貝功能,應(yīng)該選用字節(jié)流進(jìn)行操作(可能拷貝的是圖片),并且采用邊讀邊寫的方式(節(jié)省內(nèi)存)。
到此這篇關(guān)于Java 超詳細(xì)講解IO操作字節(jié)流與字符流的文章就介紹到這了,更多相關(guān)Java IO操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java Adapter 適配器模式(類適配器,對象適配器)優(yōu)缺點對比
這篇文章主要介紹了Java 適配器模式(類適配器,對象適配器)優(yōu)缺點對比的相關(guān)資料,java 適配器在基礎(chǔ)知識中還是比較重要的,這里就說下如何使用,需要的朋友可以參考下2016-12-12
SpringBoot 注解事務(wù)聲明式事務(wù)的方式
springboot使用上述注解的幾種方式開啟事物,可以達(dá)到和xml中聲明的同樣效果,但是卻告別了xml,使你的代碼遠(yuǎn)離配置文件。今天就扒一扒springboot中事務(wù)使用注解的玩法,感興趣的朋友一起看看吧2017-09-09
SpringBoot集成JWT實現(xiàn)Token登錄驗證的示例代碼
隨著技術(shù)的發(fā)展,分布式web應(yīng)用的普及,通過session管理用戶登錄狀態(tài)成本越來越高,因此慢慢發(fā)展成為token的方式做登錄身份校驗,本文就來介紹一下SpringBoot集成JWT實現(xiàn)Token登錄驗證的示例代碼,感興趣的可以了解一下2023-12-12
Java使用CompletableFuture進(jìn)行非阻塞IO詳解
這篇文章主要介紹了Java使用CompletableFuture進(jìn)行非阻塞IO詳解,CompletableFuture是Java中的一個類,用于支持異步編程和處理異步任務(wù)的結(jié)果,它提供了一種方便的方式來處理異步操作,并允許我們以非阻塞的方式執(zhí)行任務(wù),需要的朋友可以參考下2023-09-09

