重慶江津網(wǎng)站建設(shè)外包seo服務(wù)收費標準
目錄
分類
字節(jié)流
InputStream
OutputStream
文件拷貝
字符流
FileReader
FileWriter
處理流
BufferedReader
BufferedWriter
文本拷貝
? ? ? ? 流是從起源到接受的有序數(shù)據(jù),通過流的方式允許程序使用相同的方式來訪問不同的輸入/輸出源。? ? ? ??
分類
按數(shù)據(jù)單位分:字節(jié)流(二進制文件)? ? ? ? 字符流(文本文件)
按數(shù)據(jù)流向分:輸入流? ? ? ? 輸出流
按流的角色分:節(jié)點流? ? ? ? 處理流?
IO流的40多個類都是由這四個抽象基類派生的
字節(jié)流
InputStream
常用子類:
- FileInputStream? ? ? ? 文件輸入流
- BufferedInputStream? ? ? ? ? 緩沖字節(jié)輸入流
- ObjectInputStream? ? ?? ?對象字節(jié)輸入流? ? ? ? ? ? ?
import java.io.FileInputStream;public class FileInputStream_ {public static void main(String[] args) {readFile01();System.out.println();readFile02();}public static void readFile01(){String path="D:\\javacode\\IO\\src\\test.txt";int read;FileInputStream fis=null;try {fis=new FileInputStream(path);while((read=fis.read())!=-1)//讀取一個字節(jié)的數(shù)據(jù),讀到末尾返回-1{System.out.print((char)read);//一個一個讀}} catch (Exception e) {e.printStackTrace();}finally {try {fis.close();} catch (Exception e) {e.printStackTrace();}}}public static void readFile02(){String path="D:\\javacode\\IO\\src\\test.txt";byte[] buf=new byte[8];FileInputStream fis=null;int len;try {fis=new FileInputStream(path);while((len=fis.read(buf))!=-1)//讀取一個字節(jié)的數(shù)據(jù),讀到末尾返回-1{System.out.print((new String(buf,0,len)));//一次最多讀入buf.length字節(jié)的數(shù)據(jù),存入字節(jié)數(shù)組buf}} catch (Exception e) {e.printStackTrace();}finally {try {fis.close();} catch (Exception e) {e.printStackTrace();}}}
}
OutputStream
子類:FileOutputStream
import java.io.FileOutputStream;public class FileOutputStream_ {public static void main(String[] args) {writeFile01();}public static void writeFile01(){String path="D:\\javacode\\IO\\src\\test.txt";FileOutputStream fos=null;try {//fos=new FileOutputStream(path);//覆寫fos=new FileOutputStream(path,true);//加true,追加文本fos.write('6');fos.write("helloworld".getBytes());//獲取str對應(yīng)的字節(jié)數(shù)組} catch (Exception e) {e.printStackTrace();}finally {try {fos.close();} catch (Exception e) {e.printStackTrace();}}}
}
#字節(jié)流中文會亂碼,這是因為只能存一個字節(jié)一個字節(jié)輸出?
文件拷貝
import java.io.FileInputStream;
import java.io.FileOutputStream;public class FileCopy {public static void main(String[] args) {//文件拷貝FileInputStream fileInputStream=null;//輸入流FileOutputStream fileOutputStream=null;//輸出流//源文件和目標文件String srcpath="C:\\Users\\Elysia\\Pictures\\Saved Pictures\\illust_86465238_20210124_003335.jpg";String destpath="D:\\javacode\\IO\\src\\pic.jpg";try {fileOutputStream=new FileOutputStream(destpath,true);fileInputStream=new FileInputStream(srcpath);byte[] buf=new byte[1024];int len;while((len=fileInputStream.read(buf))!=-1){fileOutputStream.write(buf,0,len);}} catch (Exception e) {e.printStackTrace();}finally {try {fileOutputStream.close();fileInputStream.close();}catch (Exception e){e.printStackTrace();}}}
}
字符流
FileReader
import java.io.FileReader;public class FileReader_ {public static void main(String[] args) {FileReader fileReader=null;String path="D:\\javacode\\IO\\src\\test.txt";try {fileReader=new FileReader(path);char[] buf=new char[8];//用char接收int len;while((len=fileReader.read(buf))!=-1){System.out.print(new String(buf,0,len));}
// int read;//單個讀取
// while((read= fileReader.read())!=-1){
// System.out.print((char)read);
// }} catch (Exception e) {e.printStackTrace();}finally {try {fileReader.close();//關(guān)閉文件}catch (Exception e){e.printStackTrace();}}}
}
FileWriter
import java.io.FileWriter;public class FileWriter_ {public static void main(String[] args) {FileWriter fileWriter=null;String path="D:\\javacode\\IO\\src\\test.txt";try{fileWriter=new FileWriter(path,true);//加true表示追加fileWriter.write("\n成功寫入");}catch (Exception e){e.printStackTrace();}finally {try{fileWriter.close();//必須 一定 關(guān)閉流,才能真正的寫入}catch (Exception e){e.printStackTrace();}}}
}
必須 一定 關(guān)閉/flush流,才能真正的寫入
?
處理流
????????將“流”包裝,在其之上為程序提供更強大的讀寫功能
?節(jié)點流的數(shù)據(jù)源是特定的,而處理流則利用了向上轉(zhuǎn)型,可以封裝多種“流”,減小了節(jié)點流之間的差異。
優(yōu)勢:
- 使用處理流進行 讀寫操作更簡單
- 處理流增加了緩沖,提高效率?
#在關(guān)閉包裝流的時候,會自動關(guān)閉里面封裝的字節(jié)流
BufferedReader
????????從字符輸入流讀取文本,緩沖字符,以提供字符,數(shù)組和行的高效讀取。
import java.io.BufferedReader;
import java.io.FileReader;public class BufferedReader_ {public static void main(String[] args) throws Exception{String path="D:\\javacode\\IO\\src\\test.txt";BufferedReader bufferedReader=new BufferedReader(new FileReader(path));String line;//按行讀取,效率高while((line=bufferedReader.readLine())!=null){System.out.println(line);//讀取一行}bufferedReader.close();//只需要關(guān)閉包裝流}
}
BufferedWriter
????????文本寫入字符輸出流,緩沖字符,以提供單個字符,數(shù)組和字符串的高效寫入。
import java.io.BufferedWriter;
import java.io.FileWriter;public class BufferedWriter_ {public static void main(String[] args) throws Exception{String path="D:\\javacode\\IO\\src\\test.txt";BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter(path,true));bufferedWriter.newLine();//插入一個換行bufferedWriter.write("成功寫入");bufferedWriter.close();}
}
文本拷貝
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;public class TxtCopy {public static void main(String[] args) throws Exception{String dest="D:\\javacode\\IO\\src\\dest.txt";String src="D:\\javacode\\IO\\src\\test.txt";BufferedReader bufferedReader=new BufferedReader(new FileReader(src));BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter(dest));String line;while((line=bufferedReader.readLine())!=null){bufferedWriter.write(line);//末尾沒有換行符bufferedWriter.newLine();//每讀取一行,插入換行符}bufferedWriter.close();bufferedReader.close();}
}