IO流
Posted 要死要活的程序猿啊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IO流相关的知识,希望对你有一定的参考价值。
1:递归(理解)
(1)方法定义中调用方法本身的现象
举例:老和尚给小和尚讲故事,我们学编程。
(2)递归的注意事项;
- 1:递归一定要有出口,否则就是死递归;
- 2:递归的次数不能太多,否则就内存溢出;
- 3:构造方法不能递归使用.
(3)递归的案例:
A:递归求阶乘;
B:兔子问题(斐波那契数列);
C:递归输出指定目录下所有指定后缀名的文件绝对路径;
D:递归删除带内容的目录(小心使用).
2:IO流(掌握)
(1)IO用于在设备间进行数据传输的操作
(2)分类:
A:流向
输入流 读取数据
输出流 写出数据
B:数据类型:
字节流
字节输入流 读取数据 InputStream
字节输出流 写出数据 OutputStream
字符流
字符输入流 读取数据 Reader
字符输出流 写出数据 Writer
注意:
- 1:如果我们没有明确说明按照什么分,默认按照数据类型分。
- 2:除非文件用windows自带的记事本打开我们能够读懂,才采用字符流,否则建议使用字节流。
每种基类的子类都是以父类名作为后缀名。
XxxOutputStream
XxxInputStream
XxxReader
XxxWriter
(3)FileOutputStream写出数据
A:操作步骤
1:创建字节输出流对象
2:调用write()方法写数据
3:释放资源
B:代码体现:
FileOutputStream fos = new FileOutputStream("fos.txt"); fos.write("hello".getBytes()); fos.close();
C:要注意的问题?
1:创建字节输出流对象做了几件事情?
- 1:调用系统功能去创建文件;
- 2:创建fos对象;
- 3:把fos对象指向这个文件.
2:为什么一定要close()?
- 1:让流对象变成垃圾,这样就可以被垃圾回收器回收;
- 2:通知系统去释放跟该文件相关的资源.
3:如何实现数据的换行?
因为你值写了字节数据,并没有写入换行符号。
如何实现呢?写入换行符号即可。
因为不同的系统针对不同的换行符号识别是不一样的?
windows:\r\n
linux:\n
Mac:\r
而一些常见的个高级记事本,是可以识别任意换行符号的。
d:如何实现数据的追加写入?
用构造方法带第二个参数是true的情况即可。
FileOutputStream fos = new FileOutputStream("a.txt", true);
(4)FileInputStream读取数据
A:操作步骤
a:创建字节输入流对象;
b:调用read()方法;
c:释放资源.
B:代码体现:
FileInputStream fis = new FileInputStream("fos.txt"); //方式1 int by = 0; while((by=fis.read())!=-1) { System.out.print((char)by); } //方式2 byte[] bys = new byte[1024]; int len = 0; while((len=fis.read(bys))!=-1) { System.out.print(new String(bys,0,len)); } fis.close();
(5)案例:2种实现
A:复制文本文件
B:复制图片
C:复制视频
数据源:
c:\\a.txt -- 读取数据-- FileInputStream
目的地:
d:\\b.txt -- 写出数据 -- FileOutputStream
(6)字节缓冲区流
通过定义数组的方式确实比以前一次读取一个字节的方式快很多,所以,看来有一个缓冲区还是非常好的。
既然是这样的话,那么,java开始在设计的时候,它也考虑到了这个问题,就专门提供了带缓冲区的字节类。
这种类被称为:缓冲区类(高效类,高级流)
写数据:BufferedOutputStream
读数据:BufferedInputStream
构造方法可以指定缓冲区的大小,但是我们一般用不上,因为默认缓冲区大小就足够了。
为什么不传递一个具体的文件或者文件路径,而是传递一个OutputStream对象呢?
原因很简单,字节缓冲区流仅仅提供缓冲区,为高效而设计的。但是呢,真正的读写操作还得靠基本的流对象实现。
(7)案例:4种实现
A:复制文本文件
B:复制图片
C:复制视频
3:字节流和字符流
IO流分类
字节流:
InputStream
FileInputStream
BufferedInputStream
OutputStream
FileOutputStream
BufferedOutputStream
字符流:
Reader
FileReader
BufferedReader
Writer
FileWriter
BufferedWriter
以上是关于IO流的主要内容,如果未能解决你的问题,请参考以下文章
此应用小部件片段中所有意图 (PendingIntents) 的逻辑流
JAVA IO流相关代码(Serializable接口,管道流PipedInputStream类,RandomAccessFile类相关代码)