前言:
IO流和File是用于把数据存放在硬盘里的工具。File可以把文件存至硬盘,但不能更改里面的数据。通过IO流可以改写硬盘里的数据。整理下学习笔记,打好基础,daydayup!!!
IO流
I指Input,称为输入流:负责把数据读到内存中去。O指Output,称为输出流:负责写数据出去。
IO流的分类体系
IO流按照流的方向可分为输入流和输出流;按照数据的最小单位可分为字节流和字符流。字节流适合操作所有类型的文件。字符流只适合操作纯文本文件。
字节输入流:以内存为基准,来自磁盘文件/网络中的数据以字节的形式读入到内存中去的流
字节输出流:以内存为基准,把内存中的数据以字节写出到磁盘文件或者网络中去的流。
字符输入流:一内存为基准,来自磁盘文件/网络中的数据以字符的形式读入到内存中去的流。
字符输出流:以内存为基准,把内存中的数据以字符写出到磁盘文件或者网络介质中去的流。
(图片来源:黑马程序员)
FileInputStream(文件字节输入流)
作用:以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中去
输入方法为:
方法 | 说明 |
public int read() | 每次读取一个字节返回,如果发现没有数据可读会返回-1 |
public int read(byte[ ] buffer) | 每次用一个字节数组去读取数据,返回字节数组读取了多少字节,如果发现没有数据可读会返回-1 |
public byte[ ] readAllBytes() throw IOException | 直接将当前字节输入流对应的文件对象的字节数据装到一个字节数组返回 |
通过上述方法可以实现单个字节输入,多个字节输入和全部字节输入
1,单个字节输入
FileInputStream通过构造器取得对象后,通过read方法可以依次调取到字节,当全都调取结束后,将返回-1。示例如下:
但read默认只能读取一个字节,需要全部读取完,需要重复多行代码。为了优化这一过程你,可以使用while语句循环,进行连续读取。如下
2,多个字节输入
和单个字节输入不同的是,多个字节输入需要定义一个字节数组。然后在read方法中定义字节变量,操作如下
如果需要连续读取,则需要通过while进行操作。如下:
3,一次读取完全部字节
通过readAllBytes可以取到全部的字节,示例如下
FileOutputStream(文件字节输出流)
作用:以内存为基准,把内存中的数据以字节的形式写出到文件中去
输出方法为:
方法 | 说明 |
public void write (int a) | 写一个字节出去 |
public void write (byte[ ] buffer) | 写一个字节数组出去 |
public void write (byte[ ] buffer,int pos,int len) | 写一个字节数组的一部分出去 |
public void close() throw IOException | 关闭流 |
例:
案例:
通过字节输出和输入实现文件的复制
思路:指定复制的位置,设定输入的字节数,然后通过输入流写入,通过输出流写出
操作步骤:如下
总结
字节流可以输出一切,图片,视频,文档,本次实验输出的是文档,感兴趣的可以试着输出视频之类的。整理结束,撒花!!!