23_IO流之字元流
阿新 • • 發佈:2020-09-21
1 字元流處理編碼問題
用來處理中文等位元組流不好處理的的情況.
InputStreamReader
OutputStreamWriter
package f_readerWriter; import java.io.*; /** * 字元流 */ public class ReaderWriter01 { public static void main(String[] args) throws IOException { //預設編碼 //OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("9_io\\dest.txt")); //指定編碼 //OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("9_io\\dest.txt"),"UTF-8"); OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("9_io\\dest.txt"),"GBK"); osw.write("中國"); osw.close(); //輸入流 // InputStreamReader isr = new InputStreamReader(new FileInputStream("9_io\\dest.txt")); InputStreamReader isr = new InputStreamReader(new FileInputStream("9_io\\dest.txt"),"GBK"); //一次一個字元 int ch; while((ch=isr.read()) != -1){ System.out.print((char)ch); } isr.close(); } }
2 字元流寫資料的5種方式(記得重新整理)
方法名 | 說明 |
---|---|
void write(int c) | 寫一個字元 |
void write(char[] cbuf) | 寫一個字元陣列 |
void write(char[] cbuf, int off, int len) | 寫一個字元陣列的一部分 |
void write(String str) | 寫一個字串 |
void write(String str, int off, int len) | 寫一個字串的一部分 |
package f_readerWriter; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; /** * 寫資料五種方法 */ public class ReaderWriter02 { public static void main(String[] args) throws IOException { OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("9_io\\dest.txt"),"UTF-8"); // void write(int c) | 寫一個字元 //osw.write(97); //osw.write(98); //osw.flush();//重新整理流 //void write(char[] cbuf) | 寫一個字元陣列 char[] chs = {'a', 'b', 'c', 'd', 'e'}; //osw.write(chs); //void write(char[] cbuf, int off, int len) | 寫一個字元陣列的一部分 //osw.write(chs, 0, chs.length); //osw.write(chs, 1, 3); //void write(String str) | 寫一個字串 //osw.write("abcde"); //void write(String str, int off, int len) | 寫一個字串的一部分 //osw.write("abcde", 0, "abcde".length()); osw.write("abcde", 1, 3); //釋放資源 osw.close(); } }
3 字元流讀資料的2種方式
方法名 | 說明 |
---|---|
int read() | 一次讀一個字元資料 |
int read(char[] cbuf) | 一次讀一個字元陣列資料 |
package f_readerWriter; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; /** * 讀資料的2種方式 */ public class ReaderWriter03 { public static void main(String[] args) throws IOException { InputStreamReader isr = new InputStreamReader(new FileInputStream("9_io\\src.txt")); //int read() | 一次讀一個字元資料 //int ch; //while((ch=isr.read()) != -1){ // System.out.print((char)ch); //} // int read(char[] cbuf) | 一次讀一個字元陣列資料 char[] chs = new char[1024]; int len; while((len=isr.read(chs)) != -1){ System.out.print(new String(chs, 0, len)); } isr.close(); } }
4 轉換流
- FileReader: FileReader(String fileName);
- FileWriter: FileWriter(String fileName);
package f_readerWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* 轉換流
*/
public class ReaderWriter04 {
public static void main(String[] args) throws IOException {
//建立輸入流
FileReader fr = new FileReader("9_io\\src.txt");
//建立輸出流
FileWriter fw = new FileWriter("9_io\\dest.txt");
//複製檔案
//int ch;
//while((ch=fr.read()) != -1){
// fw.write(ch);
//}
char[] chs = new char[1024];
int len;
while((len=fr.read(chs)) != -1){
fw.write(chs, 0, len);
}
//釋放資源
fr.close();
fw.close();
}
}