Java基礎IO流介紹之四——什麼是字元流、常用的字元流有哪些
阿新 • • 發佈:2021-06-26
字元流
1、簡介
1、概述
char 2個位元組 ----->在 jvm中 預設採用的是 unicode編碼 佔2個位元組
在作業系統中:
在所有的編碼表中 英文字元都佔1個位元組 ,漢字 在 GBK中 佔2個位元組 ,在UTF-8中佔 3個位元組
案例:
import java.io.File; import java.io.FileInputStream; public class Demo9 { public static void main(String[] args) throws Exception{ //使用位元組流 讀取 a.txt中的內容 File file = new File("file/a.txt"); FileInputStream fileInputStream = new FileInputStream(file); //讀取 一個位元組 // int read1 = fileInputStream.read(); // System.out.println((char)read1); // int read2 = fileInputStream.read(); // System.out.println((char)read2); // int read3 = fileInputStream.read(); // System.out.println((char)read3); //讀取一個位元組陣列 byte[] data = new byte[4]; int len; while ((len = fileInputStream.read(data))!=-1){ System.out.println(new String(data,0,len)); } fileInputStream.close(); } }
2、頂級父類
Writer
Reader
3、子類
FileWriter:檔案字元輸出流
FileReader:檔案字元輸入流
2、檔案字元輸出流——FileWriter
2.1、構造方法
FileWriter(File file) 給一個File物件構造一個FileWriter物件。 FileWriter(File file, boolean append) 給一個File物件構造一個FileWriter物件。。 FileWriter(String fileName) 構造一個給定檔名的FileWriter物件。 FileWriter(String fileName, boolean append) 構造一個FileWriter物件,給出一個帶有布林值的檔名,表示是否附加寫入的資料。
2.2、常用方法
void close()
關閉流,先重新整理。
void flush()
重新整理流。
void write(char[] cbuf)
寫入一個字元陣列。
void write(char[] cbuf, int off, int len)
寫入字元陣列的一部分。
void write(int c)
寫一個字元
void write(String str)
寫一個字串
void write(String str, int off, int len)
寫一個字串的一部分。
//案例: import java.io.File; import java.io.FileWriter; public class Demo10 { public static void main(String[] args) throws Exception{ //建立字元流物件 // File file = new File("file/a.txt"); // FileWriter fileWriter = new FileWriter(file); FileWriter fileWriter = new FileWriter("file/a.txt"); } } //案例2: import java.io.File; import java.io.FileWriter; public class Demo10 { public static void main(String[] args) throws Exception{ //建立字元流物件 // File file = new File("file/a.txt"); // FileWriter fileWriter = new FileWriter(file); FileWriter fileWriter = new FileWriter("file/a.txt",true); // char c = '劉'; // fileWriter.write(c);//說明 內部有緩衝區 String s = "落霞與孤鶩齊飛,秋水共長天一色"; // char[] chars = s.toCharArray(); // fileWriter.write(chars); fileWriter.write(s); fileWriter.flush(); fileWriter.close(); } }
2.3、複製文字檔案
案例:
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
public class Demo12 {
public static void main(String[] args) throws Exception{
//建立兩個File物件
File srcFile = new File("file/a.txt");
File dirFile = new File("dir/a.txt");
//建立字元流
FileReader fileReader = new FileReader(srcFile);
FileWriter fileWriter = new FileWriter(dirFile);
//一邊讀一邊寫
// 第一種 每次複製一個字元 所用的時間為:4448300納秒
long start = System.nanoTime();
// int data;
// while ((data = fileReader.read())!=-1){
// fileWriter.write(data);
// }
//第二種 每次複製一個字元陣列 608500納秒
char[] data = new char[1024*8];
int len;
// while ((len = fileReader.read(data))!=-1){
// fileWriter.write(data,0,len);
// }
//第三種
while ((len = fileReader.read(data))!=-1){
fileWriter.write(new String(data,0,len));
}
long end = System.nanoTime();
System.out.println("所用的時間為:"+(end - start)+"納秒");
fileReader.close();
fileWriter.close();
}
}
3、檔案字元輸入流——FileReader
3.1、構造方法
FileReader(File file)
建立一個新的 FileReader ,給出 File讀取。
FileReader(String fileName)
建立一個新的 FileReader ,給定要讀取的檔案的名稱。
3.2、常用方法
int read()
讀一個字元
int read(char[] cbuf)
將字元讀入陣列。
abstract int read(char[] cbuf, int off, int len)
將字元讀入陣列的一部分。
//案例:
import java.io.File;
import java.io.FileReader;
public class Demo11 {
public static void main(String[] args) throws Exception{
File file = new File("file/a.txt");
FileReader fileReader = new FileReader(file);
//每次可以讀取一個字元
// int read = fileReader.read();//根據當前的編碼環境 進行動態的讀取
// System.out.println((char) read);
// int data ;
// while ((data = fileReader.read())!=-1){
// System.out.println((char)data);
// }
// 每次讀取一個字元陣列
char[] piao = new char[3];
int len;
// while (true){
// len = fileReader.read(piao);
// if (len == -1){
// break;
// }
// System.out.print(new String(piao,0,len));
// }
while ((len = fileReader.read(piao))!=-1){
System.out.print(new String(piao,0,len));
}
fileReader.close();
}
}