IO流_字符流

IO流_字符流

/**
 * 一、流的分类:
 * 1.操作的数据单位:字节流、字符流
 * 2.数据的流向:输入流、输出流
 * 3.流的角色:节点流、处理流
 *
 * 二、流的体系结构
 * 抽象基类             节点流(或文件流)            缓冲流(处理流的一种)
 * InputStream         FileInputStream           BufferedInputStream
 * OutputStream        FileOutputStream          BufferedOutputStream
 * Reader              FileReader                BufferedReader
 * Writer              FileWriter                BufferedWriter
 */

FileReader

示例代码:

public class testFileReader {
    /*
    说明点:
    1.read()的理解:返回读入的一个字符,如果达到文件末尾,返回-1
    2.异常的处理:为了保证流资源一定可以执行关闭操作,需要使用try-catch-finally处理
    3.读入的文件一定要存在,否则就会报FileNotFoundException异常
     */
    public static void main(String[] args){
        FileReader fileReader = null;
        try {
            //将a.txt读入内存中并输出到控制台
            //1.实例化File类的对象  指明要操作的文件
            File file = new File("基础语法\a.txt");  //相对路径  相较于当前工程
            //2.提供具体的流
            fileReader = new FileReader(file);
            //3.数据的读入
            //read()  返回读入的一个字符,如果达到文件末尾 返回-1
//        int read = fileReader.read();
//        while (read != -1){
//            System.out.print((char) read);
//            read = fileReader.read();
//        }
            int read = 0;
            while ((read != fileReader.read())){
                System.out.print((char) read);
                read = fileReader.read();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //4.流的关闭操作
                if (fileReader != null)
                fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

public class testFileRead2 {
    //对read()操作升级  使用read()重载方法
    public static void main(String[] args){
        FileReader fileReader = null;
        try {
            //1.实例化File类的实例化
            File file = new File("基础语法\a.txt");
            //2.FileReader流的实例化
            fileReader = new FileReader(file);
            //3.读入操作
            //read(char[] cbuf)  返回每次读入cbuf数组中的字符的个数,如果达到文件末尾,返回-1
            char[] cbuf = new char[4];
            int len;
            while((len = fileReader.read(cbuf)) != -1){
//                //方式一
//                for (int i = 0; i <len ; i++) {
//                    System.out.print(cbuf[i]);
//                }
                //方式二
                String str = new String(cbuf,0,len);
                System.out.print(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fileReader != null)
                //4.资源的关闭
            {
                try {
                    fileReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

FileWriter

示例代码:

/*
从内存中写出数据到硬盘的文件里。

说明:
1.输出操作,对应的File文件可以不存在,并不会报异常
2.
    File对应的硬盘中的文件如果不存在,再输出过程中会自动创建此文件
    FIle对应的硬盘中的文件如果存在
        如果流使用的构造器是:FileWriter(file,false) 或者 FileWriter(file)
            是对原有文件的覆盖
        如果流使用的构造器是:FileWriter(file,true)
            不会对原有文件覆盖,而是在原有文件基础上追加内容

 */
public class testFileWriter {
    public static void main(String[] args)  {
        FileWriter fileWriter = null;
        try {
            //1.提供file类的对象,知名写出到的文件
            File file = new File("基础语法\b.txt");

            //2.提供FileWriter的对象,用于数据的写出
            fileWriter = new FileWriter(file,false);

            //3.写出的操作
            fileWriter.write("i have a dream
");
            fileWriter.write("you need to have a dream");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fileWriter != null)
                //4.流资源的关闭
            {
                try {
                    fileWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

FileReaderAndFileWriter

public class testFileReadAndFileWriter {
    public static void main(String[] args) {
        FileReader fileReader = null;
        FileWriter fileWriter = null;
        try {
            //1.创建file类对象,指明读入和写出的文件
            File src = new File("基础语法\a.txt");
            File dest =new File("基础语法\c.txt");
            //2.创建输入流和输出流的对象
            fileReader = new FileReader(src);
            fileWriter = new FileWriter(dest);
            //3.数据的读入和写出操作
            char[] cbuf = new char[4];
            int len; //记录每次读入到cbuf数组中字符的个数
            while ((len = fileReader.read(cbuf)) != -1){
                    //每次写出len个字符
                    fileWriter.write(cbuf,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.关闭流资源
            try {
                if (fileWriter != null)
                fileWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (fileReader != null)
                fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
原文地址:https://www.cnblogs.com/qiudajiang/p/13273750.html