1. 程式人生 > 其它 >java基礎進階-05-IO流_字元流

java基礎進階-05-IO流_字元流

技術標籤:javajava基礎java

IO流

IO流

字元流

  • InputStreamReader

  • OutputStreamWriter

  • 漢字儲存

    • GBK編碼
      • 2個位元組
    • UTF-8
      • 3個位元組
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();
    }
    
}