接上篇IO流
FileReader(文件字符输入流)
作用:以内存为基准,可以把文件中的数据以字符形式读到内存中去。
public int read() public int read(char[] buffer) |
try(
//这里只能放置资源变量
Reader fr=new FileReader("myio//copy.mp4");
){
int b;
while(((b=fr.read())!=-1){
System.out.println((char) c)
}catch(IOException e){
e.printStackTrace();
}
注:
每次读取一个字符的内容,性能较差
try(
//这里只能放置资源变量
Reader fr=new FileReader("myio//copy.mp4");
){
char[] buffer=new char[1024];
int len;
while(((len=fr.read(buffer))!=-1){ //读多少倒多少
System.out.println((char) c)
}catch(IOException e){
e.printStackTrace();
}
FileWriter(文件字符输出流)
作用:以内存为基准,把内存中的数据以字符的形式写到文件中去。
void wtrie(int c) void write(String str) void write(String str,int off,int len) voidwrite(char[] cbuf) void write(char[] cubuf,int off,int len) |
换行
windows:\r\n(写\r或\n都可以,Java会自动补全)
Linux: \n
Mac: \r
续写
打开续写开关即可,创建对象的第二个参数
默认false:关闭续写。会清空文件
手动传递true:打开续写,不会清空文件
Writer fw=new EileWriter("myio//a.txt",true);
注意事项:
字符输出流写出数据后,必须刷新流,或者关闭流,写出去的数据才能生效。
关闭流(包含刷新操作)
刷新后流可以继续使用,关闭后流不可以继续使用。
刷新:public void flush()
关闭:public void close()
总结:3
字节流适合做一切文件的拷贝(音视频,文本);字节流不适合读取中文内容输出
字符流适合做文本文件的操作(读,写)。
缓冲流
作用:对原始流进行包装,以提高原始流读写数据的性能。
字节缓冲流
作用:提高字节流读写数据的性能
BufferedReader(字符缓冲输入流)
作用:自带8K(8192)的字符缓冲流,可以提高字符输入流读取字符数据的性能。
原理:字节缓冲输入流自带8KB缓冲池;字节缓冲输出流也自带了8KB缓冲池。
构造器 | 说明 |
publicBufferedReader(Reader r) | 字符缓冲输入流 |
新增功能:按照行读取字符
方法 | 说明 |
public String readLine() | 按行读取,如果没有数据可读,返回null |
public class BufferedReader{
public static void main(String[] args){
try(
//这里只能放置资源变量
Reader fr=new FileReader("myio//copy.mp4");
BufferedReader br=new BufferedReader(fr);
){
String line;
while(((line=br.readLine(buffer))!=null){ //记录每行数据
System.out.println(line)
}catch(IOException e){
e.printStackTrace();
}
}
}
BufferedWriter(字符缓冲输出流)
作用:自带8KB的字符缓冲池,可以提高字符输出流写字符
构造器 | 说明 |
public BufferedWriter(Writer r) | 字节缓冲输出流 |
新增功能:换行
方法 | 说明 |
public void newLine() | 换行 |
public class BufferedReader{
public static void main(String[] args){
try(
//这里只能放置资源变量
Writer fw=new FileWriter("myio//copy.mp4");
BufferedWriter br=new BufferedWriter(fw);
){
String line;
while(((line=br.readLine(buffer))!=null){ //记录每行数据
System.out.println(line)
fw.newLine();
}catch(IOException e){
e.printStackTrace();
}
}
}