I/O 流

目录

前言

一、文件

1.文件流分为两种:

2.文件流常用的方法:

①创建文件对象的方法:

②获取文件的相关信息的常用方法:

③目录的创建与删除

二、IO流

1.概念

2.抽象基类

3.字符流与字节流

4.文件流(File)

①文件输入流

②文件输出流

5.缓冲流(Buffered)

6.对象流(Object)(序列化与反序列化)

①概念

②功能

③注意事项

7.标准输入流与标准输出流

8.转换流(InPutStreamReader与OutPutStreamWriter)

9.节点流与处理流

①介绍:

②区别和联系

③主要体现


前言

什么是流:流就是数据在数据源与程序之间经历的路径。数据源在程序中就是以流的形式来传输的。


一、文件

1.文件流分为两种:

输入流与输出流

输入流:数据从数据源到程序的路径

输出流:数据从程序到数据源的路径

2.文件流常用的方法:

①创建文件对象的方法:

new File(String str);//根据路径构建一个文件

new File(File file , String str);//根据父目录 + 子路径

new File(String str1 , String ste2);//根据父目录 + 子路径

注:只有使用file的createNewFile() , 才会真正的在磁盘中创建文件。

②获取文件的相关信息的常用方法:

file.getName();//获取文件名

file.exists();//查看文件是否存在

file.getAbsolutePath();//获取文件的绝对路径

file.length();//查看文件字节大小

file.getParent();//获取文件的父目录

③目录的创建与删除

file.mkdir();//创建一级目录

file.mkdirs();//创建多级目录

file.delete();//删除目录或文件

二、IO流

1.概念

1)IO是InPut/OutPut的缩写,用于处理数据的传输(网络通讯,文件传输...)

2)Java程序中,对于数据的传输操作的以流(Stream)的方式进行的

3)java.io这个包提供了各种流的接口和类,用以获取不同种类的数据,并通过方法输入或输出数据

4)输入InPut:读取外部数据(磁盘,数据库等)到程序中

5)输出OutPut:将程序中的数据传输到外部存储设备中(磁盘,数据库等)

2.抽象基类

抽象基类字节流字符流
输入流InPutStreamReader
输出流OutPutStreamWriter

注:Java的IO流涉及40多个类,每个子类的都是从上面四个基类中派生的,并且子类的名称都是用其父类名作为后缀。

3.字符流与字节流

字符流:按字符来操作,常用来处理文本文件(字符输入流与字符输出流)

字节流:按字节来操作,用户来处理音频图片等文件(字节输入流与字节输出流)

4.文件流(File)

①文件输入流

字节文件输入流:FileInPutStream

字符文件输入流:FileReader 

 

②文件输出流

字节文件输出流:FileOutPutStream

        

注:使用FileOutPutStream(String name,boolean append)创建方式,追加内容时,会在已有内容后追加新的内容

使用FileOutPutStream(String name)创建方式,追加内容时,新内容会覆盖原有内容

字符文件输出流:FileWriter

 

 常用方法:

char[] chars = {'a', 'b', 'c'};
        FileWriter fileWriter = new FileWriter(filePath, true);
        //write(int) 写入单个字符
        fileWriter.write('H');
        //write(char[]) 写入指定数组
        fileWriter.write(chars);
        //write(char[] , off , len) 写入指定数组的指定部分
        fileWriter.write("苏州".toCharArray(), 0, 1);
        //write(String) 写入字符串数组
        fileWriter.write(" 杭 州");
        //write(String , off , len) 写入字符串的指定部分
        fileWriter.write("上海 , 天津", 0, 2);
        fileWriter.close();

5.缓冲流(Buffered)

缓冲流也叫处理流

例如:BufferedWriter就可以对Writer进行包装(其他三种同理)

BufferedOutPutStream,实现了缓冲的输出流,可以将多个字节写入到底层输出流中,从而避免每次写入都调用底层系统。

6.对象流(Object)(序列化与反序列化)

①概念

1)在保存数据的同时,还需要保存数据的值和数据类型,就需要用到对象流,且这个过程就是序列化反序列化是在恢复数据的时候,将数据的值和数据类型一同恢复。

2)需要让某个对象支持序列化机制,则必须让该类实现可序列化(实现两个接口其一即可):

Serializable         //  这是一个标记接口,其中并没有方法(推荐使用)

Externalizable     //  该接口有方法需要实现

②功能

提供了对基本类型或者对象类型的序列化和反序列化的方法

ObjectInPutStream: 提供了反序列化的功能

ObjectOutPutStream: 提供了序列化的功能

③注意事项

1)读写的顺序一定要一致

2)要实现序列化或者反序列化对象,需要实现Serializable(Externalizable)接口

3)序列化的类中建议添加serialVersionUID,为了提高版本的兼容性

4)序列化对象时,默认将其所有属性都序列化,但除了Static(静态)与transient(临时)

5)序列化对象时,要求其属性类型也实现序列化

6)序列化具有继承性,其父类实现了序列化接口,其子类也默认实现了序列化

7.标准输入流与标准输出流

类型默认设备
System.in标准输入InPutStream键盘
System.out标准输出PrintStream显示器

注:System.out 可以使用setOut() 修改输出路径

8.转换流(InPutStreamReader与OutPutStreamWriter)

1)InPutStreamReader:是Reader的子类,可以将InPutStream字节输入流)转换成  Reader字符输入流

2)OutPutStreamWriter:是Writer的子类,可以将OutPutStream字节输出流)转换成  Writer字符输出流

注:当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文乱码问题,所以在纯文本情况下,建议将字节流转换成字符流。

9.节点流与处理流

①介绍:

1)节点流:可以从一个特定的数据源中读写数据

2)处理流(包装流):是"连接" 已存在的流(包括节点流也包括处理流),为程序提供更强大的读写功能

②区别和联系

1)节点流是底层流,直接和数据源相连

2)处理流包装节点流,可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输出

3)处理流对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连

③主要体现

例如(BufferedReader和BufferedWriter)

1)性能的提高:主要以增加缓冲的方式来提高输出的效率

2)操作的便捷:处理流可能提供了一系列便捷的方法来一次性输入大量数据,使用更加灵活方便

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值