關(guān)于Java中的IO流總結(jié)(推薦)
1、 流的繼承關(guān)系,以及字節(jié)流和字符流。
2、 節(jié)點(diǎn)流FileOutputStream和FileInputStream和處理流BufferedInputStream和BufferedOutputStream。以及對(duì)應(yīng)的FileOutputWriter,F(xiàn)ileInputReader,BufferedInputReader,BufferedOutputWriter。
3、 轉(zhuǎn)換流InputStreamReader和OutputStreamWriter
一:流的繼承關(guān)系
字節(jié)流

字符流

字符流和字節(jié)流的使用范圍:字節(jié)流一般用來處理圖像,視頻,以及PPT,Word類型的文件。字符流一般用于處理純文本類型的文件,如TXT文件等,字節(jié)流可以用來處理純文本文件,但是字符流不能用于處理圖像視頻等非文本類型的文件。
二:處理流BufferedReader,BufferedWriter,BufferedInputStream
BufferedOutputsStream,都要包上一層節(jié)點(diǎn)流。也就是說處理流是在節(jié)點(diǎn)流的基礎(chǔ)之上進(jìn)行的,帶有Buffered的流又稱為緩沖流,緩沖流處理文件的輸入輸出的速度是最快的。所以一般緩沖流的使用比較多。
下面是兩個(gè)簡單的文件復(fù)制的實(shí)例:
public class MycopyTest {
public static void main(String[] args) {
File src = new File("D:/1.jpg");
// D:/1.jpg必須的存在不然會(huì)報(bào)錯(cuò)
File dest = new File("D:/2.jpg");
// 如果D:/2.jpg存在則覆蓋,如果不存在則新建
streamCopy(src, dest);
}
private static void readCopy(File src,File dest)
{
FileReader fr=null;
FileWriter fw=null;
BufferedReader br=null;
BufferedWriter bw=null;
try {
fr=new FileReader(src);
fw=new FileWriter(dest);
br=new BufferedReader(fr);
bw=new BufferedWriter(fw);
String str;
while((str=br.readLine())!=null)
{
bw.write(str);
bw.newLine();
}
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
bw.close();
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void streamCopy(File src, File dest) {
FileInputStream fis = null;
FileOutputStream fos = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
fis = new FileInputStream(src);
fos = new FileOutputStream(dest);
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
int len;
byte[] b = new byte[1024];
while ((len = bis.read(b)) != -1) {
bos.write(b, 0, len);
// bos.write(b,0,len);是把讀到數(shù)組的大小字節(jié)寫入
// bos.write(b);最后一次如果數(shù)組未寫滿的話就會(huì)多讀。
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
bos.close();
bis.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}三:轉(zhuǎn)換流InputStreamReader和OutputStreamWriter

轉(zhuǎn)換流的作用,文本文件在硬盤中以字節(jié)流的形式存儲(chǔ)時(shí),通過InputStreamReader讀取后轉(zhuǎn)化為字符流給程序處理,程序處理的字符流通過OutputStreamWriter轉(zhuǎn)換為字節(jié)流保存。
public class InputStreamWriterTest {
public static void main(String[] args) {
File src = new File("D:/Files/哈哈.txt");
File dest = new File("D:/Files/斯密斯.txt");
BufferedWriter bw = null;
BufferedReader br = null;
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(src);
fos = new FileOutputStream(dest);
InputStreamReader ir = new InputStreamReader(fis, "GBK");
OutputStreamWriter ow = new OutputStreamWriter(fos, "GBK");
bw = new BufferedWriter(ow);
br = new BufferedReader(ir);
String str;
while ((str = br.readLine()) != null) {
bw.write(str);
bw.newLine();
bw.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
bw.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}以上這篇關(guān)于Java中的IO流總結(jié)(推薦)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot Session接口驗(yàn)證實(shí)現(xiàn)流程詳解
這篇文章主要介紹了SpringBoot+Session實(shí)現(xiàn)接口驗(yàn)證(過濾器+攔截器)文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-09-09
Java實(shí)現(xiàn)導(dǎo)入csv的示例代碼
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)導(dǎo)入csv的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
java開發(fā)hutool HttpUtil網(wǎng)絡(luò)請(qǐng)求工具使用demo
這篇文章主要為大家介紹了hutool之HttpUtil網(wǎng)絡(luò)請(qǐng)求工具使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
Java8利用Stream實(shí)現(xiàn)列表去重的方法詳解
這篇文章主要為大家介紹了Java利用Stream實(shí)現(xiàn)列表去重的幾種方法詳解,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下2022-04-04
springBoot基于webSocket實(shí)現(xiàn)掃碼登錄
最近做了個(gè)新項(xiàng)目,涉及到掃碼登錄。之前項(xiàng)目使用的是 ajax輪詢的方式。感覺太low了。所以這次用webSocket的方式進(jìn)行實(shí)現(xiàn),感興趣的可以了解一下2021-06-06
詳解使用Spring?Data?repository進(jìn)行數(shù)據(jù)層的訪問問題
這篇文章主要介紹了使用Spring?Data?repository進(jìn)行數(shù)據(jù)層的訪問,抽象出Spring Data repository是因?yàn)樵陂_發(fā)過程中,常常會(huì)為了實(shí)現(xiàn)不同持久化存儲(chǔ)的數(shù)據(jù)訪問層而寫大量的大同小異的代碼,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧2022-06-06

