前言
IO流用来处理设备之间的数据传输
– 文件复制,上传文件和下载文件
• IO流分类
– 输出流 • FileWriter
– 输入流 • FileReader
一、FileWriter
• 构造方法
– FileWriter(String fileName)
• 成员方法
– void write(String str)
– void flush()
– void close()
二、FileWriter方法
1.构造方法
FileWriter(String fileName); //创建输出流对象,如果有该文件,则清空文件内容,否则创建对应文件。
FileWriter fw = new FileWriter(“c.txt”,true); //不清空文件,表示追加写入,默认是false
绝对路径:以盘符开始的路径(d:\a.txt)
FileWriter fw = new FileWriter(“d:\a.txt”);
相对路径:相对当前项目而言的,在项目的根目录下(a.txt)
FileWriter fw = new FileWriter(“a.txt”);```
2.FileWriter写数据的方法
write(); 数据没有直接写到文件,其实是写到了内存缓冲区,需要flush()。
1.void write(String str):写一个字符串数据
fw.write(“IO流你好,Hello”);
2.void write(String str,int index,int len):写一个字符串中的一部分数据
在后面追加写入str字符的一部分,从str的下标index开始,len数量的长度
fw.write(“12345”);
fw.write(“12345”,1,3);
内容为:12345234
3.void write(int ch):写一个字符数据,这里写int类型的好处是既可以写char类型的数据,也可以写char对应的int类型的值。‘a’,97
fw.write(‘a’);
fw.write(97);
内容为:aa
4.void write(char[] chs):写一个字符数组数据
5.void write(char[] chs,int index,int len):写一个字符数组的一部分数据
6.换行
windows:\r\n ,linux:\n , mac:\r
fw.write(“\r\n”);
3.flush()
flush():刷新缓冲区。流对象还可以继续使用。
fw.flush();
即将内存缓冲区中的数据写入a.txt文件。
4.close()
close():先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。一般用于关闭流,释放资源。
fw.close();
三、FileReader读数据
• 构造方法
– FileReader(String fileName)
• 成员方法
– int read()
– int read(char[] cbuf)
四、FileReader方法
1.构造方法
FileReader(String fileName); //fileName为文件名
2.FileReader读数据的方法
1.int read();//读取一个字符,索引到下一位
int ch = fr.read(); //返回的是字符的对应编码
char c = (char)ch; //转换回字符
如果读取完数据后,继续读取会读取到 -1,以此可以做循环打断的条件,如下
while((len=fr.read(chs))!=-1) {
//System.out.println(new String(chs,0,len));
System.out.print(new String(chs,0,len));
}
2.int read(char[] cbuf); //读取cbuf字符数组的长度,放入cbuf里面,包括换行符
char[] chs = new char[5];
int len = fr.read(chs);
System.out.println("len:"+len); //len:5
//System.out.println(new String(chs));//对应的字符串
System.out.println(new String(chs,0,len));//对应的字符串
一般写法:
//char[] chs = new char[5];
char[] chs = new char[1024]; //这里可以是1024及其整数倍
int len;
//1:fr.read(chs)
//2:len=fr.read(chs)
//3:len != -1
while((len=fr.read(chs))!=-1) {
System.out.print(new String(chs,0,len));
}
五、缓冲流 BufferedReader,BufferedWriter
一般都使用缓冲流,这样效率高点。
-
//创建输入缓冲流对象
BufferedReader br = new BufferedReader(newFileReader(“FileWriterDemo.java”)); -
//创建输出缓冲流对象
BufferedWriter bw = new BufferedWriter(new FileWriter(“Copy.java”));
其中有两个比较特殊的方法 -
BufferedWriter void newLine():写一个换行符,这个换行符由系统决定
*bw.newLine();等效于 bw.write(“\r\n”); -
BufferedReader String readLine():一次读取一行数据,但是不读取换行符
-
因此,读写数据
String line; while((line=br.readLine())!=null) { bw.write(line); bw.newLine(); bw.flush(); }
六、StringBuilder的使用
遍历集合,得到每一个学生信息,并把学生信息按照一定的格式写入文本文件
for(int x=0; x<array.size(); x++) {
Student s = array.get(x);
//heima001,向问天,30,北京
StringBuilder sb = new StringBuilder(); sb.append(s.getId()).append(",").append(s.getName()).append(",").append(s.getAge()).append(",").append(s.getAddress());
bw.write(sb.toString());
bw.newLine();
bw.flush();
}
总结
基础的IO流常用的方法