5-1 字節字符轉換流
1)編碼問題
2)認識文本和文本文件
java 的文本(char)是16位無符號整數,是字符的unicode編碼(雙字節編碼)
文件是byte byte byte……的數據序列
文本文件是文本(char)序列按照某種編碼方案(utf-8,utf-16be,gbk)序列化爲byte的存儲序列
3)字符流(Reader Writer)--->操作的是文本文件
字符的處理,一次處理一個字符
字符的底層任然是基本的字節序列
字符流的基本實現
- InputStreamReader 完成byte流解析爲char流,按照編碼處理解析
- OutputStreamWriter 提供char流到byte流,按照編碼處理
package com.io;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;public class IsrAndOswDemo {
public static void main(String[] args) throws IOException {
InputStreamReader isr = new InputStreamReader(new FileInputStream("C:\\Users\\97386\\Desktop\\子查詢.txt"),
"utf-8");// 默認項目編碼 操作時要改成文件的編碼
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("C:\\Users\\97386\\Desktop\\子查詢2.txt"),
"utf-8");
// int c;
// while ((c = isr.read()) != -1) {
// System.out.print((char) c);
// }
char[] buffer = new char[8 * 1024];
int c;
// 批量讀取,放入buffer這個字符數組,從第0個位置開始放,最多放buffer.length個,返回的是讀到字符的個數
while ((c = isr.read(buffer, 0, buffer.length)) != -1) {
String s = new String(buffer, 0, c);
System.out.print(s);
osw.write(buffer, 0, c);
osw.flush();
}
isr.close();
osw.close();
}}
5-2 字符流之文件讀寫流
FileReader/FileWriter
package com.io;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class FrAndFwDemo {
public static void main(String[] args) throws IOException {
// 默認文件是該java項目編碼
FileReader fr = new FileReader("C:\\Users\\97386\\Desktop\\子查詢.txt");
FileWriter fw = new FileWriter("C:\\Users\\97386\\Desktop\\子查詢2.txt"); // 可以添加第二個參數true,在文件後追加內容
char[] buffer = new char[2056];
int c;
while ((c = fr.read(buffer, 0, buffer.length)) != -1) {
fw.write(buffer, 0, c);
fw.flush();
}
fr.close();
fw.close();}
}
5-3 字符流的過濾器
BufferedReader --->readLine 一次讀一行
BufferedWriter/PrintWriter --->寫一行
package com.io;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;public class BrAndBwOrPwDemo {
public static void main(String[] args) throws IOException {
// 對文件進行讀寫操作
BufferedReader br = new BufferedReader(
new InputStreamReader(new FileInputStream("C:\\Users\\97386\\Desktop\\子查詢.txt"), "utf-8"));
/*BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream("C:\\Users\\97386\\Desktop\\子查詢2.txt")));*/
PrintWriter pw = new PrintWriter("C:\\Users\\97386\\Desktop\\子查詢3.txt");
String line;
while ((line = br.readLine()) != null) {
System.out.println(line); // 一次讀一行,並不能識別換行
/*bw.write(line);
// 單獨寫出換行操作
bw.newLine();
bw.flush();*/
pw.println(line);
pw.flush();
}
br.close();
// bw.close();
pw.close();}
}