一、字符流
1、字符流FileReader
一次读取一个字符:
int read()
2、字符流FileWriter
写一个字符:
void write(int c)
写一个字符串:
void write(String str)
3、字符流的拷贝
字符流必须刷新缓冲区。(文件的基本单位是字节)
int c;
while((c = fr.read()) != -1){
fw.write(c); // 到这一步还没有写到文件上。
// fw.flush();
}
fw.close(); // 关闭流,但要先刷新它。
4、什么情况下使用字符流
字符流 -- 只能文本文件
如果是拷贝文件,效率稍稍不如字节流
如果读取或者写入一段文本数据,使用字符流
字节流 -- 操作任何文件
图片、音视频、可运行文件等等
5、字符流是否可以拷贝非纯文本的文件
6、自定义字符数组的拷贝
char[] chs = new char[1024];
int len;
while((len = fr.read(chs)) != -1) {
fw.write(chs, 0, len);
fw.flush(); // 在合适的时候刷新缓冲区
}
7、带缓冲的字符流
String line;
while((line = br.readLine()) != null){
bw.write(line);
bw.newLine();
}
8、readLine()和newLine()方法
9、练习 -- 将一个文本文档的文本反转,第一行和倒数第一行换,第二行和倒数第二行换。
10、LineNumberReader -- 统计行号
int getLineNumber()
void setLineNumber()
二、字符流其他内容
1、装饰设计模式
研究设计模式 -- 面向对象(封装、继承、多态)
2、使用指定的码表读写字符
转换流:
InputStreamReader(InpiutStream is, String charSet) -- 字节流通向字符流的桥梁
OutputStreamWriter(OutputStream os, String charSet) -- 字符流通向字节流的桥梁
谁到谁的桥梁按数据流向去理解。但是,实际操作的时候都是讲字节流传入转换流的构造方法,转变为字符流。
字符流 = 字节流 + 编码表(理解)
3、转换流图解
4、获取文本上字符出现的次数
5、试用版软件
三、递归
1、File类递归
递归:方法内部调用方法本身的编程技巧。
分析:把复杂的问题进行分解,分解成若干类似的简单问题。持续下去,直到简单的问题可以直接求解。
那么复杂的问题就由简单的问题反推得解。
使用递归时:
找规律
找出口
注意:
递归不能调用太多次,容易内存溢出
递归必须有出口,否则死递归。
应用:
斐波那契数列(黄金分割数列)
求阶乘
遍历带子内容的文件夹
删除带子内容的文件夹
2、File类练习 -- 键盘录入路径,获取该路径下所有的.java文件。
拿到数组后做一个非null判断,可以避免非空2
|
|