什么是流
硬件设备和程序之间进行数据交互;数据在硬件和程序之间流动;类似于水流。(input)(output)IO流作用
文件上传和下载
程序在内存中,,,硬件和内存的数据交互。
读进来,写出去
流的分类
源:需要传输的数据本身
目标对象:把数据传输到哪
输出流和输入流是成对出现的
(byte字节)字节流:一般用在传输非文本文件的数据,二进制数据:图片,视频…不能使用记事本打开
(char字符)字符流:一般处理我呢吧数据:如txt等
字节流:byte字节 1byte=8位
字符流:1字符=2字节
stream的都是字节流
writer reader都是字符流
缓存流都有buffered
文件的问题说明
文本文件:字符流
非文本文件:字节流
字节流可以处理文本文件
使用流的选择标准FileWriter使用
FileWriter(File file) 给一个File对象构造一个FileWriter对象。 FileWriter(File file, boolean append) 给一个File对象构造一个FileWriter对象。 FileWriter(String fileName) 构造一个给定文件名的FileWriter对象。 FileWriter(String fileName, boolean append) 构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。
如果构造方法,只有一个参数,那么默认是覆盖模式,后面的内容覆盖掉之前的内容。
如果构造方法,有2个参数,并且第2个参数是true,那么就是追加模式,如果是false,也是覆盖模式。
常用方法
void close() 关闭流,先刷新。 void flush() 刷新流。 String getEncoding() 返回此流使用的字符编码的名称。 void write(char[] cbuf, int off, int len) 写入字符数组的一部分。 void write(int c) 写一个字符 void write(String str, int off, int len) 写一个字符串的一部分。
// 创建对象
FileWriter fw=new FileWriter("a.txt",true);
// 调用写的方法
String s="aaa";
fw.write(s);//将内容写在了字符缓冲区中
fw.flush();//刷新缓冲区,将内容写入硬盘
String s1="bbb";
fw.write(s1);
fw.flush();
flush()可以把数据写入硬盘中,刷新缓冲区,可以随时调用,刷新。
colse()关闭流,释放资源;先刷新缓冲区再关闭流
FileReader使用
常用方法:
abstract void close() 关闭流并释放与之相关联的任何系统资源。 int read() 返回字符的int形式 读到末尾 返回-1 读一个字符 int read(char[] cbuf) 将字符读入数组。 int read(CharBuffer target) 尝试将字符读入指定的字符缓冲区。
创建对象
FileReader(File file) 创建一个新的 FileReader ,给出 File读取。 FileReader(String fileName) 创建一个新的 FileReader ,给定要读取的文件的名称。
单个字符读取
FileReader fr=new FileReader("a.txt");
int ch=fr.read();
while(ch!=-1) {
System.out.println((char)ch);
ch=fr.read();
}
第二种读法
缓冲区长度一般是1024的整数倍
//将字符读入数组
FileReader fr=new FileReader("a.txt");
char [] chars=new char[2];//创建一个字符缓冲区(每2个一读)
int len = fr.read(chars);//返回字符长度 并把内容存入缓冲去
while(len!=-1) {
System.out.print(new String(chars,0,len));//将字符数组转换成字符串
len=fr.read(chars);
}
输入流的步骤
1、创建输入流对象
2、调用read()方法(2种)
read()方法一次只能读取一个字符;
调用read(char[] char)方法:读取的效率更高,使用字符数组缓存区来读取字符,实现步骤:
创建字符缓冲区,大小是1024的N倍
创建循环变量 int len;
循环遍历,读取字符数组
把字符数组转成字符串对象
关闭流
//首先读取aa.txt
FileReader fr=new FileReader("E:/a.txt");
FileWriter fw=new FileWriter("copy.txt");
//创建缓冲区
char[] chars=new char[2];
//循环读入
int len;
while((len=fr.read(chars))!=-1) {
// String str=new String(chars,0,len);
fw.write(chars);
}
fw.close();
字节流


