java基礎進階-05-IO流_字元流
阿新 • • 發佈:2021-01-12
IO流
IO流
字元流
-
InputStreamReader
-
OutputStreamWriter
-
漢字儲存
- GBK編碼
- 2個位元組
- UTF-8
- 3個位元組
- GBK編碼
String s = "中國";
byte[] bys = s.getBytes();
byte[] bys = s.getBytes("GBK");
- 字元流
- 位元組流+編碼表
編碼表
- 二進位制
- 所有資訊都是二進位制儲存
- 編碼
- 按某種規則將字元轉換為二進位制儲存
- 解碼
- 按某種規則將二進位制轉換為字元解析
- 編碼表
- 字符集
- 一個系統所有字元的集合
- ASCII/GBXX/Unicode
- 字符集
編碼解碼
-
編碼
- getBytes()
- getBytes(String charsetName)
-
解碼
- String(byte[] bytes)
- String(byte[] bytes,String charsetName)
String s = "中國";
byte[] bys1 = s.getBytes();
System.out.println(Arrays.toString(bys1));//[-28,-72,-83,-27,-101,-67]
byte[] bys2 = s.getBytes("UTF-8");
System.out.println(Arrays.toString(bys2));//[-28,-72,-83,-27,-101,-67]
byte[] bys2 = s.getBytes("GBK");
System.out.println(Arrays.toString(bys2));//[-42,-48,-71,-6]
String s = "中國";
byte[] bys1 = s.getBytes("UTF-8");
String ss = new String(bys1,"UTF-8");
System. out.println(ss);
字元流中的編碼解碼
- FileOutStream
- FileInputStream
public class ConversionStramDemo{
public static void main(String[] args){
//採用預設編碼
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("fos.txt"));
osw.write("中國");
osw.close();
}
}
public class ConversionStramDemo{
public static void main(String[] args){
//採用指定編碼
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("fos.txt"),"UTF-8");
osw.write("中國");
osw.close();
}
}
public class ConversionStramDemo{
public static void main(String[] args){
//採用預設編碼
InputStreamReader isr = new InputStreamReader(new FileInputStream("isr.txt"));
//一次讀一個字元
int ch;
while((ch=isr.read())!=-1){
System.out.println((char)ch);
}
isr.close();
}
}
public class ConversionStramDemo{
public static void main(String[] args){
//採用預設編碼
InputStreamReader isr = new InputStreamReader(new FileInputStream("isr.txt"),"UTF-8");
//一次讀一個字元
int ch;
while((ch=isr.read())!=-1){
System.out.println((char)ch);
}
isr.close();
}
}
字元流寫資料
- OutputStreamWriter
- write(int c)
- write(char[] cbuf)
- write(char[] cbuf,int off,int len)
- write(String str)
- write(String str,int off,int len)
寫入一個字元
OutputStreamWrite osw = new OutputStreamWriter(new FileOutputStream("osw.txt"));
osw.write(97);//a
//有緩衝,需要重新整理
osw.flush();
//關閉前也會先重新整理
osw.close();
寫入一個字元陣列
OutputStreamWrite osw = new OutputStreamWriter(new FileOutputStream("osw.txt"));
char[] ch = {'a','b','c','d'};
osw.write(ch);
//關閉前也會先重新整理
osw.close();
寫入一個字串
OutputStreamWrite osw = new OutputStreamWriter(new FileOutputStream("osw.txt"));
String s = "abcde";
osw.write(s);
//關閉前也會先重新整理
osw.close();
字元流讀資料
- InputStreamReader
- read()
- read(char[] cbuf)
一次讀一個字元
InputStreamReaderisr = new InputStreamReader(new FileInputStream("isr.txt"));
int ch;
while((ch=isr.read())!=-1){
System.out.println((char)ch);
}
isr.close();
一次讀一個字元陣列
InputStreamReaderisr = new InputStreamReader(new FileInputStream("isr.txt"));
char[] chs = new char[1024];
int len;
while((len=isr.read(chs))!=-1){
System.out.println(new String(chs,0,len));
}
isr.close();
複製java檔案
- 一次讀一個字元
InputStreamReader isr = new InputStreamReader(new FileInputStream("xxx.java"));
OutputStreamWrite osw = new OutputStreamWriter(new FileOutputStream("xxx2.java"));
//一次讀一個字元
int ch;
while((ch=isr.read())!=-1){
osw.write(ch);
}
osw.close();
isr.close();
- 一次讀一個字元陣列
InputStreamReader isr = new InputStreamReader(new FileInputStream("xxx.java"));
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("xxx2.java"));
//一次讀一個字元陣列
char[] chs = new char[1024];
int len;
while((len=isr.read(chs))!=-1){
osw.write(chs,0,len);
}
osw.close();
isr.close();
- 改進
- FileReader
- FileWriter
FileReader fr = new FileReader("xxx.java");
FileWriter fw = new FileWriter("xxx2.java");
int ch;
while((ch=fr.read())!=-1){
fw.write(ch);
}
fw.close();
fr.close();
FileReader fr = new FileReader("xxx.java");
FileWriter fw = new FileWriter("xxx2.java");
char[] chs = new char[1024];
int len;
while((len=fr.read(chs))!=-1){
fw.write(ch);
}
fw.close();
fr.close();
字元緩衝流
- BufferedReader
- BufferedWriter
字元緩衝輸出流
- BufferedWriter
BufferedWriter bw = new BufferedWriter(new FileWirter("bw.txt"));
bw.write("hello");
bw.close();
字元緩衝輸入流
-
BufferedWriter
-
一次讀一個字元
BufferedReader br = new BufferedReader(new FileReader("bw.txt"));
int ch;
while((ch=br.read())!=-1){
System.oyut.println((char)ch);
}
br.close();
- 一次讀一個字元陣列
BufferedReader br = new BufferedReader(new FileReader("bw.txt"));
//一次讀一個字元陣列
char[] chs = new char[1024];
int len;
while((len=br.read(chs))!=-1){
System.oyut.println(new String(chs,0,len));
}
br.close();
字元緩衝流複製java檔案
//一次讀寫一個字元資料
public class CopyJavaDemo{
public static void main(String[] args){
BufferedReader br = new BufferedReader(new FileReader("br.java"));
BufferedWriter bw = new BufferedWriter(new FileWirter("bw.java"));
//一次讀寫一個字元資料
int ch;
while((ch=br.read())!=-1){
bw.write(ch);
}
bw.close();
br.close();
}
}
//一次讀寫一個字元陣列
public class CopyJavaDemo{
public static void main(String[] args){
BufferedReader br = new BufferedReader(new FileReader("br.java"));
BufferedWriter bw = new BufferedWriter(new FileWirter("bw.java"));
//一次讀寫一個字元陣列
char[] chs = new char[1024];
int len;
while((len=br.read(chs))!=-1){
bw.write(ch,0,len);
}
bw.close();
br.close();
}
}
特有功能
- BufferedWriter
- newLine()
- BufferedReader
- readLine()
BufferedWriter bw = new BufferedWriter(new FileWirter("bw.txt"));
bw.wirte("xxxxx");
bw.newLine();
bw.wirte("xxxxx");
bw.close();
BufferedReader br = new BufferedReader(new FileReader("br.txt"));
//讀取內容不包含換行
String line = br.readLine();
System.out.println(line);
br.close();
改進java檔案的讀取
public class CopyJavaDemo{
public static void main(String[] args){
BufferedReader br = new BufferedReader(new FileReader("br.java"));
String line;
while((line=br.readLine())!=null){
System.out.println(line);
}
bw.close();
br.close();
}
}
改進java檔案的複製
public class CopyJavaDemo{
public static void main(String[] args){
BufferedReader br = new BufferedReader(new FileReader("br.java"));
BufferedWriter bw = new BufferedWriter(new FileWirter("bw.java"));
String line;
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
}
bw.close();
br.close();
}
}