0


大数据必学Java基础(六十九):IO流的深入了解

IO流的深入了解

一、引入

1、File类

封装文件/目录的各种信息,对目录/文件进行操作,但是我们不可以获取到文件/目录中的内容。

2、引入IO流

I/O : Input/Output的缩写,用于处理设备之间的数据的传输。

3、形象理解

IO流 当做一根 “管”:

4、IO流的体系结构

二、案例 通过java程序完成文件的复制操作

1、功能分解:文件 -- 程序:FileReader****

一个字符一个字符的将文件中的内容读取到程序中了

package com.lanson.io01;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * @author : Lansonli
 */
public class Test01 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) throws IOException {
        //文件--》程序:
        //1.有一个文件:----》创建一个File类的对象
        File f = new File("d:\\Test.txt");
        //2.利用FileReader这个流,这个“管”怼到源文件上去   ---》创建一个FileReader的流的对象
        FileReader fr = new FileReader(f);
        //3.进行操作“吸”的动作  ---》读取动作
        /*下面的代码我们验证了:如果到了文件的结尾处,那么读取的内容为-1
        int n1 = fr.read();
        int n2 = fr.read();
        int n3 = fr.read();
        int n4 = fr.read();
        int n5 = fr.read();
        int n6 = fr.read();
        System.out.println(n1);
        System.out.println(n2);
        System.out.println(n3);
        System.out.println(n4);
        System.out.println(n5);
        System.out.println(n6);*/
        //方式1:
        /*int n = fr.read();
        while(n!=-1){
            System.out.println(n);
            n = fr.read();
        }*/

        //方式2:
        int n;
        while((n = fr.read())!=-1){
            System.out.println((char)n);
        }

        //4.“管”不用了,就要关闭  ---》关闭流
        //流,数据库,网络资源,靠jvm本身没有办法帮我们关闭,此时必须程序员手动关闭:
        fr.close();
    }
}

想一次性读取五个字符,不够的话下次再读五个字符

package com.lanson.io01;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

/**
 * @author : Lansonli
 */
public class Test02 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) throws IOException {
        //文件--》程序:
        //1.创建一个File类的对象
        File f = new File("d:\\Test.txt");
        //2.创建一个FileReader的流的对象
        FileReader fr = new FileReader(f);
        //3.读取动作
        //引入一个“快递员的小车”,这个“小车”一次拉5个快递:
        char[] ch = new char[5];//缓冲数组
        int len = fr.read(ch);//一次读取五个:返回值是这个数组中 的有效长度
        while(len!=-1){
            //System.out.println(len);
            //错误方式:
            /*for (int i = 0 ;i < ch.length;i++){
                System.out.println(ch[i]);
            }*/
            //正确方式:
            /*for (int i = 0 ;i < len;i++){
                System.out.println(ch[i]);
            }*/
            //正确方式2:将数组转为String:
            String str = new String(ch,0,len);
            System.out.print(str);
            len = fr.read(ch);
        }

        //4.关闭流
        fr.close();
    }
}

2、功能分解****程序 ****-- **文件:FileWriter

一个字符一个字符的向外输出

package com.lanson.io01;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

/**
 * @author : Lansonli
 */
public class Test03 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) throws IOException {
        //1.有个目标文件:
        File f = new File("d:\\demo.txt");
        //2.FileWriter管怼到文件上去:
        FileWriter fw = new FileWriter(f);
        //3.开始动作:输出动作:
        //一个字符一个字符的往外输出:
        String str = "hello你好";
        for (int i = 0 ;i < str.length();i++){
            fw.write(str.charAt(i));
        }
        //4.关闭流:
        fw.close();
    }
}

发现:

如果目标文件不存在的话,那么会自动创建此文件。

如果目标文件存在的话:

new FileWriter(f) 相当于对原文件进行覆盖操作。

new FileWriter(f,false) 相当于对源文件进行覆盖操作,不是追加。

new FileWriter(f,true)对原来的文件进行追加,而不是覆盖。

利用缓冲数组:向外输出

package com.lanson.io01;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

/**
 * @author : Lansonli
 */
public class Test03 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) throws IOException {
        //1.有个目标文件:
        File f = new File("d:\\demo.txt");
        //2.FileWriter管怼到文件上去:
        FileWriter fw = new FileWriter(f,true);
        //3.开始动作:输出动作:
        //一个字符一个字符的往外输出:
        String str = "你好中国";
        char[] chars = str.toCharArray();
        fw.write(chars);
        //4.关闭流:
        fw.close();
    }
}

3、功能分解:利用FileReader,FileWriter文件复制

package com.lanson.io01;

import java.io.*;

/**
 * @author : Lansonli
 */
public class Test04 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) throws IOException {
        //1.有一个源文件
        File f1 = new File("d:\\Test.txt");
        //2.有一个目标文件:
        File f2 = new File("d:\\Demo.txt");
        //3.搞一个输入的管 怼到源文件上:
        FileReader fr = new FileReader(f1);
        //4.搞一个输出的管,怼到目标文件上:
        FileWriter fw = new FileWriter(f2);

        //5.开始动作:
        //方式1:一个字符一个字符的复制:
        /*int n = fr.read();
        while(n!=-1){
            fw.write(n);
            n = fr.read();
        }*/

        //方式2:利用缓冲字符数组:
        /*char[] ch = new char[5];
        int len = fr.read(ch);
        while(len!=-1){
            fw.write(ch,0,len);//将缓冲数组中有效长度写出
            len = fr.read(ch);
        }*/
        //方式3:利用缓冲字符数组,将数组转为String写出。
        char[] ch = new char[5];
        int len = fr.read(ch);
        while(len!=-1){
            String s = new String(ch,0,len);
            fw.write(s);
            len = fr.read(ch);
        }

        //6.关闭流:(关闭流的时候,倒着关闭,后用先关)
        fw.close();
        fr.close();

    }
}

  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

本文转载自: https://blog.csdn.net/xiaoweite1/article/details/127143961
版权归原作者 Lansonli 所有, 如有侵权,请联系我们删除。

“大数据必学Java基础(六十九):IO流的深入了解”的评论:

还没有评论