书接上文 ,对于数据库的操作我们已经了解了一二 , 下面讲讲对文件的操作
今天有点sad...
1. I/O流概述
1.
按
数据单位的不同
区分 : 字符流和字节流
字符流以
字符
为单位读取 , 字节流以
字节
为单位读取
2.
按
传输方向
分 : 输入流 和 输出流
输入 : 由源—>程序
输出 : 由程序—>源
2.字符流
①字符输入输出流
FileReader类 : 输入流 , 从源到程序
FileWriter类 : 输出流 , 从程序到源 (fileWriter默认为覆盖方式)
write() ; //向文件中写入数据
close() ; //关闭流 ,流是占用文件的
append() ; //追加参数 ,true表示追加 ,false表示覆盖
read(char[]) ; //将文件中的字符读入char数组中
②带缓冲区的读写
用字符流对文件进行读写效率非常低 ( 逐个字符读写 )
所以Java提供了
字符流缓冲区
进行读写操作,提高效率
1.原始人方法 (用char[]字符数组充当缓冲区)
public static void main(String[] args) throws Exception {
FileWriter fileWriter = new FileWriter("writer.txt",true);
FileReader fileReader = new FileReader("writer.txt");
try {
fileWriter.write("Java");
int len = 1024;
char[] buff = new char[len];
while ((len = fileReader.read(buff)) != -1) {
这种方法写入文件,必须将写入设置为追加 ,否则是一片空白
fileWriter.write(buff, 0, len);
}
fileReader.read(buff); 读入到缓冲区数组中
for (int i = 0; i < buff.length; i++) {
System.out.print(buff[i]);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
fileWriter.close();
fileReader.close();
}
}
2.BufferedReader和BufferedWriter ,带缓冲区的字符缓冲流(性能高)
* BufferedReader : 逐行处理文件
步骤 : (1)将文件装入FileReader对象中 ,
再将FileReder对象装入BufferedReader
(2)使用readLine() ;方法 (只能读取一行)
(3)close();
具体实现
public void test02() throws Exception {
BufferedReader br = new BufferedReader(
new FileReader("reader.txt"));
BufferedWriter bw = new BufferedWriter(
new FileWriter("writer.txt",true));不加参数2,也存在覆盖情况
try {
String str;
读入内容并做判断是否为空
while((str=br.readLine())!=null) {
从reader.txt读入并写入writer.txt中
bw.write(str);
我现在想插入一个换行符
bw.newLine();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
br.close();
bw.close();
}
}
注意事项 :
调用BufferedWriter的
write()
方法 , 会先将内容写入缓冲区 ,等
缓冲区满 / 调用close()方法
时, 才写入目标文件 所以 ,在最后必须在finally{}代码块中加入 close关闭对象 ,否则很有可能无法写入!!!
3.File类
(1)基本概念
绝对路径 : 从系统盘开始的路径,如
D:\file\a.txt
相对路径 : 相对于当前目录而言的 ,如
src\Hello.java
(2)常用方法
P260