* File类:用于描述一个文件或者文件夹
* 通过File对象我们可以读取文件或者文件夹的属性数据,如果我们需要读取文件的内容数据,那么我们需要使用IO流技术。
* IO流(Input Output)
* IO流解决的问题: 解决设备与设备之间的数据传输问题。 内存--->硬盘 硬盘--->内存
* IO流技术:
* IO流分类:
* 按数据的流向划分:
* 输入流 输出流
* 按处理的单位划分:
* 字节流:字节流读取到得都是文件中二进制数据,读取到二进制数据不会经过任何处理
* 字符流:字符流读取的数据是以字符为单位的。字符流也是读取文件中的二进制数据,不过会把这些二进制数据转化成我们能识别的字符
* 字符流:字节流+解码
*
* 输入字节流:
* ------------|InputStream 所有输入字节流的基类 抽象类
* ----------------|FileInputStream 读取文件数据的输入字节流
* 使用FileInputStream读取文件数据的步骤:
* 1.找到目标文件
* 2.建立数据的输入通道
* 3.读取文件中的数据
* 4.关闭资源
*
*
* 问题1:读取完一个文件的数据的时候,我不关闭资源有什么影响?
* 答案:资源文件一旦使用完毕应该马上释放,否则其他的程序无法对该资源文件进行其它的操作。
* */
运行结果:bbbbbbbb
/*
* 输出字节流:
* ----------|OutputStream 是所有输出字节流的父类。 抽象类
* --------------|FileOutStream 向文件输出数据的输出字节流
* FileOutputStream如何使用呢?
* 1.找到目标文件
* 2.建立数据的输出通道
* 3.把数据转换成字节数组写出
* 4.关闭资源
*
* FileOutputStream要注意的细节:
* 1.使用FileOutputStream的时候,如果目标文件不存在,那么会自动创建目标文件对象
* 2.使用FileOutputStream写数据的时候,如果目标文件已经存在,那么会先清空目标文件中的数据,然后再写入数据
* 3.使用FileOutputStream写数据的时候,如果目标文件已经存在,需要在原来数据基础上追加数据的时候应该使用new FileOutputStream(file,true)构造函数,第二参数为true
* 4.使用FileOutputStream方法写数据的时候,虽然接收的是一个int类型的数据,但是真正写出的只是一个字节的数据,只是
* 把低八位的二进制数据写出,其他二十四位数据全部丢弃
* */
/*
* 4.使用FileOutputStream方法写数据的时候,虽然接收的是一个int类型的数据,但是真正写出的只是一个字节的数据,只是
* 把低八位的二进制数据写出,其他二十四位数据全部丢弃
* 00000000-00000000-00000001-11111111 511
*/
运行结果:字节数组的内容:[-1, 0, 0, 0]
/*
* IO异常的处理
* */
运行结果:
读取文件出错了
Exception in thread "main" java.lang.RuntimeException: java.io.FileNotFoundException: D:\bbbb.txt (系统找不到指定的文件。)
at Day20.Demo05.readTest(Demo05.java:30)
at Day20.Demo05.main(Demo05.java:12)
Caused by: java.io.FileNotFoundException: D:\bbbb.txt (系统找不到指定的文件。)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at Day20.Demo05.readTest(Demo05.java:20)
... 1 more
/*
* 需求:拷贝一张图片
*
* */
运行结果:关闭输出文件成功
关闭输入文件成功
/*
* 缓冲输入字节流
* 输入字节流体系:
* ------| InputStream 输入字节流的基类。抽象
* -----------| FileInputStream 读取文件数据的输入字节流
* -----------| BufferedInputStream 缓冲输入字节流 缓冲输入字节流的出现主要是为了提高读取文件数据的效率
* 其实该类内部只不过是维护了一个8kb的字节数组而已。
*
* 注意:凡是缓冲流都不具备读写文件的能力
*
* 使用BufferedInputStream的步骤:
* 1.找到目标文件
* 2.建立数据的输入通道
* 3.建立缓冲输入字节流
* 4.关闭资源
*
* */
运行结果:?
/*
* 输出字节流
* ----------| OutputStream 所有输出字节流的基类 抽象类
* ---------------|FileOutputStream 向文件输出数据的输出字节流
* ---------------|BufferedOutputStream 缓冲输出字节流 BufferedOutputStream出现的目的是为了提高写数据的效率
* 内部也是维护了一个8kb的字节数组而已。
* 使用BufferedOutputStream的步骤:
* 1.找到目标文件
* 2.建立数据的输出通道
* BufferedOutputStream要注意的细节:
* 1.使用BufferedOutputStream些数据的时候,它的write方法是先把数据写到它内部维护的字节数组中
* 2.使用BufferedOutputStream些数据的时候,它的write方法是先把数据写到它内部维护的字节数组中,如果需要把数据真正的写到硬盘上面,
* 需要调用flush方法或者是close方法、或者是内部维护的字节数组已经填满数据的时候。
* */
/*
* 练习:使用缓冲输入输出字节流拷贝一个图片
*
* */