继续讲解字符流操作方式
3.使用字符流来操作文件
使用字节流来操作汉字或者特殊符号的时候容易乱码,建以使用字符流
现有字节流后有字符流,字符流是对字节流的补充。
一般使用二进制文件必须使用字节流(图片,音频,视频)
一般使用文本文件使用字符流
字符流和字节流相同,使用原理相同。不同的是
1.创建源的时候需要用FileWrite/FileRead方法创建源
2.读取的时候需要一个char[ ] 数组接收读取的文字
原理参考之前写的东西。
4缓冲流
概念:
- 隐藏了底层节点流的差异提供了更方便的输入/输出功能,让我们只关心高级流的操作
- 使用处理流来包装节点流,程序直接操作处理流,让节点流和底层设备做IO操作
- 只关闭处理流就行了
缓冲流和普通的文件流一样也有四大基类
BufferedInputStream
BufferedOutputStream
BufferedWrite
BufferedRead
字节包装流的代码感受一下
- 单纯使用文件流的时候,写入需要告诉程序开始位置结束位置。buffered直接写入就行
- 读取的时候直接while读取,但是打印的时候还需要写开始位置结束位置
public class BufferSteamDemo {
public static void main(String[] args) throws IOException{
//字节缓冲输出流
/*
* 这个过程包括
* 1.创建源File f = new File(路径);
* 2.创建管道,OutputStream os = new FileOutputStream(f)
* 3.将os放入BufferedOutpuStream里
*/
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:/myDoc/out.txt"));
//直接写入字符串
bos.write("Hello World".getBytes());
//关闭流
bos.close();
//字节缓冲输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:/myDoc/out.txt"));
byte[] buffer = new byte[1024];
int len;
while((len = bis.read(buffer))!= -1) {
System.out.println(new String (buffer,0,len));
}
}
}
字符缓冲流代码
- 字符缓冲流强大在读取下一行的时候直接调用newLine()方法就行
- 字符缓冲流读取的时候可以不用常规读取文件的操作,先new 一个String变量 让为空值
while循环让变量不为null 直接调用readline()方法 就可以读取文件。 - 使用字符缓冲流的时候利用常规操作有一定风险,因为char[ ] buffer数组中装了bufferd方法1024个位置容易打出空位,所以也要标记好开始的位置和结束的位置
public class BufferedWritedReadSteamDemo {
public static void main(String[] args) throws IOException {
//字符缓冲流写入
BufferedWriter bw = new BufferedWriter(new FileWriter("D:/myDoc/hello.txt"));
bw.write("你好,测试");
bw.newLine();//写到下一行
bw.write("你好,再见");
//bw.flush();
bw.close();
System.out.println("写入成功!");
//字符缓冲流读取
BufferedReader br = new BufferedReader(new FileReader("D:/myDoc/hello.txt"));
/*
* 常规操作
*/
// char [] buffer = new char[1024];
//
// int len;
// while((len = br.read(buffer))!= -1) {
// System.out.println(new String (buffer,0,len));
// }
/*
* 使用包装流之后的新方法
*/
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
}
}
小结:
Buffered包装了下级的File流中的一些东西,使用缓冲流以后添加两个新方法会让读取文件更加方便
网友评论