1. 程式人生 > 其它 >Java基礎IO流介紹之四——什麼是字元流、常用的字元流有哪些

Java基礎IO流介紹之四——什麼是字元流、常用的字元流有哪些

字元流

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();
    }
}