Java - IO流

一、概念

1、IO流:流就是内存和存储设备之间传输数据的通道、管道。

2、流的分类

        (1)按照方向分:【以jvm为参照物】

a. 输入流:将 存储设备 中的数据读取到 jvm内存 中,读操作

b. 输出流:将 jvm内存 中的数据写出到 存储设备 中,写操作

        (2)按照单位分:

a. 字节流:以字节为单位,可以操作所有类型文件

b. 字符流:以字符为单位,只能操作文本文件(以记事本打开,但是不丢失原有内容的文件,例如.java .html)

        (3) 按照功能分:

a.节点流:只具有基本的读写功能

b.过滤流:在节点流的基础上,增强新的功能

二、字节流        

1、字节流的父类:【抽象类】

        InputStream:字节输入流,对应的为读操作,read方法

        OutputStream:字节的输出流,对应的为写操作,write方法

2、字节节点流:

(1) FileOutputStream:文件字节的输出流

        a. 常见的构造方法:

        a.1. FileOutputStream fos = new FileOutputStream("操作的文件路径及文件名");

                i.参数:代表操作的路径及文件名,e:/test/a.txt 或者 e:\\test\\a.txt

                ii.如果指定的文件不存在,则系统默认创建文件;但是指定的文件夹如果不存在,则报错,错误信息为 java.io.FileNotFoundException(系统找不到指定的路径)。

                iii.绝对路径:盘符:/文件夹/文件名 (不通用)

                iv.相对路径:文件夹/文件名,默认在当前project中查找有没有指定的文件夹及文件,如果指定文件不存在,则系统默认创建一个新文件;如果指定文件夹不存在,则运行报错,错误信息为 java.io.FileNotFoundException(系统找不到指定的路径)。

        a.2. FileOutputStream fos = new FileOutputStream("操作的文件路径及文件名",true);

                i. 参数:第一个参数代表操作文件路径及文件名

                             第二个参数代表是否在原有包中内容进行追加新内容

                true:不会覆盖原有内容(追加)false:覆盖原有内容

b.常见功能方法:

        void write(int n):将单个字节内容写入到文件中

        void close():关闭流,释放所有系统资源

(2) FileInputStream:文件字节的输入流

        a.常用构造方法:

        FileInputStream fis = new FileInputStream("");

        参数说明:代表读取文件路径(文件名)

        注意:如果指定文件不存在,则运行报错,错误信息为:java.io.FileNotFoundException(系统找不到指定的文件)。

        b. 常用功能方法:

        int read():一次读取一个字节的内容,将读取到的字节内容作为返回值返回,如果达到文件的尾部,则返回-1

(3)文件上传与下载

a.txt 拷贝到 b.txt

 

        // 1. 创建文件字节输入流和输出流

        FileInputStream fis = new FileInputStream("");

        FileOutputStream fos = new FileOutputStream("");

        // 2. 边读边写

        while(true){

                int n= fis.read();

                if(n==-1) break;

                fos.write(n);

        }

        // 3. 关闭流

        fis.close();

        fos.close();

3、字节过滤流

(1) ObjectOuptStream:字节过滤输出流

        a. 创建过滤流对象时,需要节点流作为基础流

// 1. 创建节点流作为基础流

FileOutputStream fos = new FileOutputStream("");

// 2. 创建过滤流对象,将基础流作为参数传递

ObjectOutputStream s=new ObjectOutputStream(fos);

        b. 可以将8种基本数据类型写入到文件中

        c. writeObject(Object obj):将对象写入文件中

4、对象序列化:

        a. 对象序列化:对象在流上传输过程称为对象序列化

        b. 对象序列化的要求:参与对象序列化的对象对应的类必须实现java.io.Serializable接口(标记接口/空接口

        c. 被 transient修饰的属性不参与对象序列化

        d. 达到文件尾部的标记为:java.io.EOFException

        e. 如果参与对象序列化的对象中有定义类型的属性时,该属性对应类需要实现 java.io.Serializable接口

写入学生信息

 学生类

读出学生信息

 结果展示

 

三、编码

1、常见编码:【理解】

ASCII码值:美国制定的第一个标准表

ISO8859-1:西欧编码,底层占用一个字节

​GBK:目前主流的中国汉字编码表,2万多汉字

GB2312:最早的中国汉字编码表,6000多汉字

GB18030:汉字的编码表,7万多中国符号

Big5:中国繁体,中国台湾应用

​UTF-8:万国码,底层采用动态编码,汉字占2~3字节

​注意:编码方式书写不区分大小写,utf-8等价 UTF-8

2、编码和解码

编码:将字符对应的十进制转换为二进制的过程

解码:将二进制转换为十进制对应字符的过程

​注意:实际开发当编码方式和解决方式一致,才不会出现乱码

四、字符流

1、字符流的父类【抽象类】

        (1) Reader:字符输入流,对应读操作

        ​(2) Writer:字符输出流,对应的写操作

2、字符节点流 

        (1) FileWriter:文件字符输出流   void write(int n):将单个字符写入到文件

        (2) FileReader:文件字符输入流   int read():一次读取一个字符的内容,将读取内容作为返回值进行返回,如果达到文件的尾部,则返回-1

3、字符过滤流

(1) BufferReader:  

String readLine():一次读取一个文本行内容,当达到文   件尾部,返回null      

        while(true){          

                String n = br.readLine();          

                if(n==null) break;          

                System.out.println(n);      

        }

(2) PrinterWriter:  

        print(参数):将对应的数据写入到文件中,不换行  

        println(参数):将对应的数据写入到文件中,自动换行  

代码展示

 

 结果展示

4、桥转换流 【需要设置编解码格式应用】

(1) 桥转换流:InputStreamReader/OutputStreamWriter

(2) 作用:字节流和字符流之间转换一个桥梁;可以设置编解码格式

(3) 开发步骤:  

// 1. 创建字节节点流对象:  

FileInputStream / FileOutputStream  

// 2. 创建桥转换流:可以设置编解码格式  

InputStreamReader / OutputStreamWriter  

// 3. 包装过滤流,目的增强读写操作(看需求)  

BufferedReader / PrintWriter  

// 4. 读写操作  

// 5. 关闭流:关闭最外层即可

五、File类 

1、File类和IO流区别

        (1) File类:代表一个文件或是文件夹,利用File类中的一些功能对文件进行操作,例如:删除文件、判断文件是否存在、获取文件名字

        ​ (2) IO流:对文件内容直接操作,读取文件内容或者是往文件中写内容

2、File常见操作

(1) 构造方法:File file = new File("文件路径及文件名");

(2) 常见功能方法:

boolean exists():判断文件是否存在,存在-true;不存在-false​

String getName():获取文件名字,带有后缀,a.txt​String

getAbsolutePath():获取绝对路径

3、实际开发应用:

利用File指定操作的文件,然后利用IO流对文件进行操作

​File file = new File("文件路径及文件名");

FileInputStream fis = new FileInputStream(file);

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值