其他分享
首页 > 其他分享> > IO(File_Read_Write)-字符流

IO(File_Read_Write)-字符流

作者:互联网

对File_Read_Write(字符流)的使用

1-"读取"XXX.txt文件到终端(但是,这种效率不高)

 @Test
    //public void test() throws IOException { ----> throws报,不严谨
    public void test() {
        FileReader fileReader = null;
        try {
            //1-实例话File类的对象,指明要操作的文件
            File file = new File("hello.txt");
            //2-提供一个流(读取文件的Read流)
            fileReader = new FileReader(file);
            //3- 数据的读入
            //read();返回读入的一个字符,如果达到文件末尾,返回-1
            int data = fileReader.read();
            while (data != -1) {
                System.out.print((char) data);
                data = fileReader.read();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4- 流的关闭
            try {
                if (fileReader != null)
                    fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

2-"读取"XXX.txt文件到终端( ---> 效率稍微高---用char[]数组)

@Test
    public void test2() {
        FileReader fileReader = null;
        try {
            //1-实例话File类的对象,指明要操作的文件
            File file = new File("hello.txt");
            //2-提供一个流(读取文件的Read流)
            fileReader = new FileReader(file);
            //3- 数据的读入
            //read();返回读入的一个字符,如果达到文件末尾,返回-1
            //使用数组
            char[] cbuf = new char[5];
            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 {
            //4-关闭流
            try {
                if (fileReader != null)
                    fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

3- "写出"--输出出去 --> 从内存写出数据到硬盘中``

细节:2-提供FileWriter的对象,用于数据的写出---用FileWriter流的细节
     如果流使用的构造器是:FileWriter(file, flase) / FileWriter(file); 会对原来的文件覆盖
     如果流使用的构造器是:FileWriter(file, true)  不会对原来的文件覆盖,而是在原来的文件基础追加内容

    public void test3() throws IOException {

        //1- 体验File类的对象,指明 --> 写出到的文件
        File file = new File("/hello.txt");
        //2-提供FileWriter的对象,用于数据的写出---用FileWriter流
        FileWriter fileWriter = new FileWriter(file, true);
        //3-写出的操作
        fileWriter.write("我需要辟邪剑法\n");
        fileWriter.write("不\n");
        fileWriter.write("你需要葵花宝典");
        //4- 关闭流
        fileWriter.close();
    }

4-文件的复制

 public void test4() {
        FileReader fileReader = null;
        FileWriter fileWriter = null;
        try {
             //1- 指明,输入和输出的文件
        /*
        下面对文件复制的使用:
        1- 选择需要复制的文件 --pwd,知道他的路径
        2-如我下面的例子,我是在testIO,里面复制已有文件-hello.txt  ---- 复制到"同目录下"取名为-hello2.txt
        所以,我("/Users/ccc/Desktop/testIO","hello2.txt"),前面部分是文件路径,后面是要取名的文件
         */
            File FileSrc = new File("/Users/ccc/Desktop/testIO/hello.txt");
            File FileDest = new File("/Users/ccc/Desktop/testIO", "hello2.txt");
            //2- 创建输入和输出的--流
            fileReader = new FileReader(FileSrc);
            fileWriter = new FileWriter(FileDest);

            //3-数据的-读/写操作

            char[] sbuf = new char[13];
            int len;
            while ((len = fileReader.read(sbuf)) != -1) {
                fileWriter.write(sbuf, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        //4- 关闭流--两个close,分别try-catch就可以
        try {
            fileReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            fileWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

标签:文件,Read,fileReader,Write,File,new,FileWriter,txt
来源: https://www.cnblogs.com/chen-zhou1027/p/16373450.html