io流: 处理设备之间的数据传输的
内部设备: 比如内存
外部设备: 比如U盘
输出流: 可以把数据储存到文件
输入流: 也可以从文件中读取数据
源
数据从哪里来 read
目的
数据到哪儿去 write
常见应用
文件复制(U盘拷贝内容)
上传文件(微信图片,qq空间图片)
下载文件(迅雷)
FileWriter
FileWriter(Stirng fileName): 传递一个文件名称
输出流写数据的步骤:
1.创建输出流对象
2.调用输出流对象的写数据的方法
3.释放资源
FileWriter fw = new FileWriter("d:\\a.txt")
使用系统资源创建了一个文件.如果系统没有这个文件会自动创建这个文件,
如果有这个文件,会将这个文件的内容清空然后再写入内容;如果没有写盘符(d:),
会写到相对路径下.即相应的项目路径下
创建了输出流对象
把输出流对象指向了文件
fw.write("io流你好")
数据没有直接写到文件,其实是写到了缓冲区
fw.flush()
利用flush()方法可以把数据写到文件
fw.close() //关流
利用close()方法可以释放资源,通知系统释放和上文件相关的资源
close()和flush()的区别
flush(); 刷新缓冲区..流对象还可以使用
close(): 先刷新缓冲区,然后通知系统释放资源关闭流...之后流对象不可以在使用了
换行符:
windows: \r\n
Linux: \n
Mac: \r
追加数据:
在FileWriter类中的构造方法其实是一个参数默认值为flose的方法,FileWriter(FileName ,boolean add)
当add为true时代表在原文件上追加数据
FileReader:
FileReader(String fileName): 传递文件名字
输入流度文件的步骤:
A: 创建输入流对象,放入源地址
B: 调用输入流对象的读数据方法
C: 释放资源
read(): 一次读取一个字符 返回值为int(对应字符的ascll码值) 当返回值为-1时,说明已经没有数据了,可以当作循环的结束条件
复制文本文件 :
A: 创建输入流对象
B: 创建输出流对象(注意)
C: 定义变量
D: 循环读取文件的数据,并赋值到变量.如果变量值不等于-1就还可以继续
E:将读取到的字符写入目的文件中
F:释放资源
read(char[] chs); 一次读取多个字符组成一个字符数组.长度为read(chs).
生成的字符数字即为chs.
使用打印chs是可先转化为Stirng类型的;如 new String(chs, 0, length)
length = read(char[] chs) 即是上一次读取字符时的有效长度,如果不这样调整长度,在最后一次构造String数据时可能会把上上次读取到字符打印输出
BufferedWriter: 将文本写入写出字符输出流,缓冲哥哥字符,从而提供单个字符,数组,和字符串的高效写入
BufferedReader: 从字符输入流中读取文本,缓冲哥哥字符,从而实现字符,数组和行的高效读取
BufferedWriter(new FileWriter("x.txt")) ;构造方法的一般形式
BufferedWriter bw = new BufferedWriter(new FileWriter("x.txt"));
bw.write(chs, 0, len)//写入字符数组chs中0到len的数据
bw.write("aaa");写入数据 aaa
bw.close();释放资源
bw.newLine(); 写一个换行符,这个换行符由系统决定 返回值void
BufferedReader br = new BufferedReader(new FileReader("c.txt"));
int ch = br.read();//单个字符读取
char[] chs = new char[1024];
br.read(chs);//一次读取一个字符数组
br.readLine();//一次读取一行数据,但不是读取换行符 返回值String.但是不包括这一行结尾得换行符
|
|