java io流03 字符流

1. 字符流

  字符流是以Reader和Writer为基础派生的一系列类

2. 字符输入流FileReader

  FileReader构造方法

public class FileReader extends InputStreamReader    //继承InputStreamReader

public FileReader(String fileName)    //创建一个指定文件名的字符输入流

public FileReader(File file)    //创建一个指定文件对象的字符输入流

public FileReader(FileDescriptor fd)    //创建一个指定文件描述符的字符输入流

  

  FileReader实例(读取字符,只能读取文本文件)

    public static void main(String[] args){
        FileReader fr = null;
        
        try{
            fr = new FileReader("C:\Users\THINK\Desktop\JavaTest\Temp.txt");
            char[] chars = new char[4];
            int readData = 0;
            while((readData = fr.read(chars))!=-1){
                System.out.print(new String(chars,0,readData));
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(fr != null){
                try{
                    fr.close();
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        }
    }

3. 字符输出流FileWriter

  FileWriter构造方法

public class FileWriter extends OutputStreamWriter    //继承OutputStreamWriter

public FileWriter(String fileName)    //创建一个指定文件名的字符输出流

public FileWriter(String fileName, boolean append)    //是否追加

public FileWriter(File file)    //创建也给指定文件对象的字符输出流

public FileWriter(File file, boolean append)    //是否追加

public FileWriter(FileDescriptor fd)    //指定字符描述符

public FileWriter(String fileName, Charset charset)    //创建一个使用命名字符集的字符输出流

public FileWriter(String fileName, Charset charset, boolean append)    //是否追加

public FileWriter(File file, Charset charset)    //使用命名字符集

public FileWriter(File file, Charset charset, boolean append)    //是否追加

  FileWriter实例

public class FileWriterTest01{
    public static void main(String[] args){
        FileWriter fw = null;
        
        try{
            fw = new FileWriter("C:\Users\THINK\Desktop\JavaTest\Temp01.txt",true);
            char[] chars = {'奥','运','会'};
            fw.write(chars);
            fw.write(chars,1,2);    //可以写入指定长度字符
            fw.write("helloworld");     //可以直接写入字符串
            fw.write("hellojava");
            fw.flush();
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(fw!=null){
                try{
                    fw.close();
            }catch(Exception e){
                e.printStackTrace();
            }
            }
        }
    }
}

  使用FileReader和FileWriter进行文本文件的拷贝(只能拷贝普遍文本文件)

public class CopyTest02{
    public static void main(String[] args){
        FileReader fr = null;
        FileWriter fw = null;
        
        try{
            fr = new FileReader("D:\JavaProject\chapter19.iml");
            fw = new FileWriter("C:\Users\THINK\Desktop\JavaTest\chapter19.iml");
            char[] chars = new char[1024*512];
            int readData = 0;
            while((readData = fr.read(chars)) != -1){
                fw.write(chars,0,readData);
            }
            fw.flush();
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(fw != null){
                try{
                    fw.close();
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
            if(fr != null){
                try{
                    fr.close();
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        }
    }
}

4. 字符缓冲输入流BufferedReader

  BufferedReader是缓冲字符输入流,为其他字符输入流添加缓冲功能。  

  BufferedReader构造方法

public class BufferedReader extends Reader    //继承Reader

public BufferedReader(Reader in, int sz)    //创建指定大小输入缓冲区的缓冲字符输入流

public BufferedReader(Reader in)    //创建默认大小输入缓冲区的缓冲字符输入流

  BufferedReader实例

public class BufferedReaderTest01{
    public static void main(String[] args) throws IOException{
        FileReader fr = new FileReader("C:\Users\THINK\Desktop\JavaTest\chapter19.iml");
        BufferedReader br = new BufferedReader(fr);    //需要传入一个字符流
        
    /*    String strLine1 = br.readLine();    //可以直接读取一行
        System.out.println(strLine1);
        
        String strLine2 = br.readLine();
        System.out.println(strLine2);  */
        
        String strLine = null;
        while((strLine = br.readLine())!=null){
            System.out.println(strLine);
        }
        br.close();   //只需关闭缓冲流,因为在源码中已经关闭了字符流
    }
}

5. 字符缓冲输出流BufferedWriter

  BufferedWriter是缓冲字符输出流,为其他字符输出流添加缓冲功能。

  BufferedWriter构造方法

public class BufferedWriter extends Writer    //继承Writer

public BufferedWriter(Writer out)    //创建默认大小的缓冲字符输出流
 
public BufferedWriter(Writer out, int sz)    //创建指定大小的缓冲字符输出流

  BufferedWriter实例

public class BufferedWriterTest01{
    public static void main(String[] args) throws IOException{
        FileWriter fw = new FileWriter("C:\Users\THINK\Desktop\JavaTest\Temp04.txt");
        BufferedWriter bw = new BufferedWriter(fw);
        bw.write("hello world");
        bw.write("hello java");
        bw.flush();
        bw.close();
    }
}

6. 转换流InputStreamReader

  InputStreamReader作用是将字节输入流转换为字符输入流,继承Reader。

  InputStreamReader实例

public class InputStreamReaderTest01{
    public static void main(String[] args) throws IOException{
        
    /*    FileInputStream fis = new FileInputStream("C:\Users\THINK\Desktop\JavaTest\chapter19.iml");
        InputStreamReader isr = new InputStreamReader(fis);    //BufferedReader使用字符流作为参数,所以要转换
        BufferedReader br = new BufferedReader(isr);    //参数要传入一个字符流    */
        
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("C:\Users\THINK\Desktop\JavaTest\chapter19.iml")));    //以上三行可以写到一块
        String strLine = null;
        while((strLine = br.readLine()) != null){
            System.out.println(strLine);
        }
        br.close();
    } 
}

7. 转换流OutputStreamWriter

  OutputStreamWriter作用是将字节输出流转换为字符输入流,继承Writer。

  OutputStreamWriter实例

public class OutputStreamWriterTest01{
    public static void main(String[] args) throws IOException{
        
    /*    FileOutputStream fos = new FileOutputStream("C:\Users\THINK\Desktop\JavaTest\Temp05.txt");
        OutputStreamWriter osw = new OutputStreamWriter(fos);
        BufferedWriter bw = new BufferedWriter(osw);  */
        
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:\Users\THINK\Desktop\JavaTest\Temp05.txt",true)));
        
        bw.write("hello java");
        bw.write("hello olympic");
        bw.flush();
        bw.close();
    }
}
原文地址:https://www.cnblogs.com/homle/p/15086207.html