IO流(掌握)
(1)IO流的分类:
A:字节流
字节输入流 InputStream
字节输出流 OutputStream
B:字符流
字符输入流 Reader --- FileReader
字符输出流 Writer --- FileReader
IO流体系图(理解):
(2)FileWriter写入数据
步骤:
A:创建字符输出流对象
B:调用写入数据方法,并刷新缓冲区
C:释放资源
代码体现:
FileWriter fw = new FileWriter("a.txt");
fw.write("hello,io");
fw.flush();
fw.close();
问题?
A:创建字符输出流对象做了几件事情?
a:创建字符输出流对象
b:调用对象的写入数据方法,并刷新缓冲区
c:释放资源
B:写数据完毕后,为什么要刷新?
C:为什么要close()?
1:让流对象变成垃圾
2:通知系统去释放和文件相关的资源
D:flush()和close()的区别?
flush():只刷新缓冲区,流对象还可以继续使用。
close():先刷新缓冲区,在关闭流对象。流对象不可以继续被使用。
E:怎么实现数据换行?
给出换行符
windows:\r\n
linu:\n
mac:\r
F:怎么实现数据追加写入?
构造时用带两个参数的
public FileWriter(String fileName,true){}
(3)FileReader读取数据
步骤:
A:创建字符输入流对象
B:调用读取数据方法,并显示
C:释放资源
代码体现:
FileReader fr = new FileReader("a.txt");
//方式1
//一次读取一个字符
int ch = 0;
while((ch=fr.read())!=-1)
{
System.out.print((char)ch);
}
//方式2
//一次读取一个字符数组
char[] chs = new char[1024];
int len = 0;
while((len=fr.read(chs))!=-1)
{
System.out.print(new String(chs,0,len));
}
fr.close();
(4)案例:
复制文本文件, 从D盘中复制一个haha.txt文件(里面字节写上”我爱学Java, 我爱学编程”)到E盘下, 起名为copy.txt
<pre class="java" name="code">public class CopyDemo {
public static void main(String[] args) throws IOException {
FileReader fl = new FileReader("f:\\复制文件\\a.txt");
FileWriter fw = new FileWriter("e:\\copy.java");
BufferedReader br =new BufferedReader(fl);
BufferedWriter bw = new BufferedWriter(fw);
int len = 0;
while ((len = br.read()) != -1) {
bw.write(len);
}
br.close();
bw.close();
}
}
字节流:
输入流:
InputStream
int read()
int read(byte[] bys)
FileInputStream
输出流:
OutputStream
write(int by)
write(byte[] bys,int index,int len)
FileOutputStream