小白学JAVA《二十四》--- JAVA I/O流概况总结,文件输入输出

一、概念
1.包含有方向和流质的特性,用于程序内外部文件的交互通讯(类似水流)
2.指的是计算机与外部世界,或者一个程序与计算机的其余部分之间的接口

二、分类
1.方向
1.1 输入流 InputStream/Reader
1.2 输出流 OutputStream/Writer
2.数据最小传输单位
2.1 字节流 InputStream/OutputStream,对于字节码文件,或者图片,或音频,视频等等文件,我们读取时,一般采用字节流,无论所有文件都可以采用
2.2 字符流 Reader/Writer 文本文件采用字符流
3.功能
3.1 低级流(节点流)----可以直接从/向一个特定的数据源(例如磁盘文件、内存、网络)读/写数据的流
FileInputStream/FileoutputStream
FileReader/FileWriter
3.2 高级流(处理流)----处理流不直接连接到设备,而是连接在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更强大的读写功能
高级字节流
过滤流 BufferedInputStream/BufferedOutputStream
数据流 DatalnputStream/DataOutputStream
字节打印输出流 PrintStream,在进行输出,采用默认字符编码集让输出到文件中的内容,以操作系统默认的编码集进行编码显示
高级字符流
缓冲流
BufferedReader 可以缓冲数据,可以一个字符或者一行一起读/BufferedWriter 将缓冲区的数据推送到文件后重新刷新清空缓冲区
转换流
InputStreamReader/OutputStreamWriter
字符打印输出流PrintWriter
对象流
序列化机制是一套向流写入或读取对象数据的自动机制(由对象向流中写入)—反序列化就是流转化为对象
ObjectOutputStream 序列化
ObjectInputStren 反序列化
增加序列化版本号,是通过在比较用的和运行的是否一致

三、file
1.File类提供了管理磁盘文件和目录的基本功能,即代表文件也代表文件夹
2.file.pathseparatorChar 通用;
3.file.separatorchar 通用/
4.file.exists 判断文件夹是否存在
5.file.isDirectory 判断是否为文件夹
6.file.isFile 判断是否为文件
7.file.getParent 得到当前文件对象的父目录地址
8.file.lenth 得到文件的长度(内容大小)
9.file.mkdirs 得到一个目录(但是要有权限)
10.file.getName 文件名获取
11.String[]pns=file.listFiles 获取文件夹中的所有文件以及子目录路径

四、 InputStream
1.read 读取文件
2.write 输出文件
3.close 关流

五、流的使用原则
一、按数据源分类
1)如果数据源是文件,对于字节流,使用FileInputStream和FileOutputStream;对于字符流,使用FileReader和 FileWriter。
2)如果数据源是字节数组byte[],则使用ByteArrayInputStream和ByteArrayOutputStream。
3)如果数据源是字符数组Char[],则使用CharArrayReader和CharArrayWriter。
4)如果数据源是String对象,对于字节流,则使用StringBufferInputStream和StringBufferOuputStream;对于字符流,则使用StringReader和StringWriter。
5)如果数据源是网络数据流,对于字节流,使用InputStream和OutputStream;对于字符流,使用Reader和Writer。
二、按是否格式化输出分:要格式化输出,则使用PrintStream或PrintWriter。
三、按是否要缓冲分,要缓冲的话,对于字节流使用BufferedInputStream和BufferedOutputStream;对于字节流,使用BufferedReader和BufferedWriter。
四、按数据格式分
1)二进制格式(只要不能确定是纯文本的):使用InputStream、OutputStream 及其所有带 Stream结束的子类。
2)纯文本格式(含纯英文与汉字或其他编码方式):使用Reader、Writer 及其所有带 Reader、Writer 的子类。
五、按输入输出分
1)输入:使用Reader、InputStream 类型的子类。
2)输出:使用Writer、OutputStream 类型的子类。
六、特殊需要
1)从Stream到Reader、Writer的转换类:InputStreamReader、OutputStreamWriter。
2)对象输入输出:ObjectInputStream、ObjectOutputStream。
3)线程间通信:PipeInputStream、PipeOutputStream、PipeReader、PipeWriter。
4)合并输入:SequenceInputStream。
5)更特殊的需要:PushbackInputStream、PushbackReader、LineNumberInputStream、LineNumberReader。
注:在不考虑特殊需求的情况,决定使用哪个类以及它的构造进程的一般准则如下:
首先,考虑最原始的数据格式是什么:原则四。
第二,是输入还是输出:原则五。
第三,是否需要转换流:原则六第1点。
第四,数据源是什么:原则一。
第五,是否要缓冲:原则三(特别注明:一定要注意的是readLine()是否有定义,有什么比 read()、write()更特殊的输入或输出方法)。
第六,是否要格式化输出:原则二。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值