z
1. 递归
在方法内部调用方法本身的编程技巧。
注意事项:
A: 递归一定要有出口,否则就是死递归
B: 递归次数不要过多,否则内存溢出。
递归删除和遍历时的一个注意事项:
File[] files = file.listFiles();
-- 下面使用files对象时,有可能出空指针异常
解释:盘下有隐藏的系统文件,只能获取到文件名,但是没有操作权限。
加上一个判断 if(files != null) {...}
案例1:求阶乘
案例2:斐波那契数列
案例3:获取目录下所有特定后缀的文件
案例4:删除带内容的文件夹
断点:代码看不懂的时候怎么办? -- 调试,改bug
输入还是输出 --- 一定要站在程序的角度
2. FileWriter
字符输出流
-- 使用FileWriter 向文本文件写入了一段字符串。
步骤:
1. 创建流对象。
调用系统资源创建了文件。(在不抛出异常的情况下,文件一定会被覆盖式创建。)
创建了输出流对象。
把输出流对象指向创建的文件。
2.写入数据。
3.刷新缓冲区。
4.释放资源。 -- 释放资源之前,调用close() 方法前 会自动调用一次flush() 方法来刷新缓冲区。
但是,不能替代手动的刷新。
面试题:为什么要close?
1.使流对象变成垃圾。
2.通知系统释放关于文件的资源。
字节流
字节输入流 读取数据 InputStream
字节输出流 写入数据 OutputStream
字符流
字符输入流 读取数据 Reader
字符输出流 写入数据 Writer
FileWirter
1. 写入数据的5种方式
void write(char[] cbuf)
写入字符数组。
abstract void write(char[] cbuf, int off, int len)
写入字符数组的某一部分。
void write(int c)
写入单个字符。
void write(String str)
写入字符串。
void write(String str, int off, int len)
写入字符串的某一部分。
2.换行
windows \r\n
linux \n
mac \r
跨平台的补充:File类的 static String separator
与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
"aaa\\bbb\\ccc.txt" -- "aaa" + File.separator + "bbb" + File.separator + "ccc.txt"
3.追加数据
FileWriter(String fileName, boolean append) -- 是否追加
FileReader
字符输入流:
步骤:
1.创建字符输入流对象
2.读取数据。判断是否有数据可读
3.释放资源。
复制字符型文件
1.封装数据源
2.封装目的地
3.读写操作
4.关闭流。
FileReader读取数据的标准代码
int len = 0;
char[] chs = new char[1024];
while((len = fr.read(chs)) != -1) {
String s = new String(chs, 0, len);
}
|
|