缓冲流

    技术2022-09-03  86

    字符缓冲流

    java.io.BufferedWriter extends Writer BufferedWriter:字符缓冲输出流

    继承自父类的共性成员方法: void write(char[] cbuf) 写入字符数组。 abstract void write(char[] cbuf, int off, int len) 写入字符数组的某一部分。 void write(int c) 写入单个字符。 void write(String str) 写入字符串。 void write(String str, int off, int len) 写入字符串的某一部分 abstract void close() 关闭此流,但要先刷新它。 abstract void flush() 刷新该流的缓冲。

    构造方法: BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输出流。 BufferedWriter(Writer out, int size) 创建一个使用给定大小输出缓冲区的新缓冲字符输出流 参数: Writer out:字符输出流,可以传递FileWriter,缓冲流会给FileWriter增加一个缓冲区,提高FileWriter的写入效率 int size:指定缓冲区的大小,不写默认大小

    特有的成员方法: void newLine() 写入一个行分隔符。会根据不同的操作系统,获取不同的行分隔符

    写换行:写换行符号 windows:\r\n linux:\n mac:\r

    使用步骤: 1 创建字符缓冲输出流,构造方法中传递字符输出流 2 调用字符缓冲输出流中的方法write,把数据写入内存缓冲区中 3 调用字符缓冲区的方法flush,把内存缓冲区中的数据刷新到文件中 4 释放资源

    public class demo06BufferedWriter { public static void main(String[] args) throws IOException { BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\Eclipse\\workplace\\day1\\src\\num11\\a.txt")); for (int i = 0; i < 10; i++) { bw.write("呆桃加油!"); // bw.write("\r\n"); bw.newLine(); //写入一个行分隔符,平时使用的println源码也是使用newLine() } bw.flush(); bw.close(); } }
    java.io.BufferedReader extends Reader BufferedReader :字符缓冲输入流 继承自父类的共性成员方法: int read() 读取单个字符。 int read(char[] cbuf) 将字符读入数组 abstract void close() 关闭该流并释放与之关联的所有资源构造方法: BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流。 BufferedReader(Reader in, int sz) 创建一个使用指定大小输入缓冲区的缓冲字符输入流 参数: - Reader in:字符输入流,可以传递FileReader,缓冲流会给FileReader增加一个缓冲区,提高FileReader的读取效率 - int size:指定缓冲区的大小,不写默认大小 特有的成员方法: - String readLine () 读取一个文本行 。通过下列字符之一即可认为某行已终止:换行 (’\n’)、回车 (’\r’) 或回车后直接跟着换行(’\r\n’) - 返回值:包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null (注意不是返回-1)使用步骤: 1 创建字符缓冲输入流,构造方法中传递字符输入流 2 调用字符缓冲输入流中的方法read/readLine读取文本 3 释放资源 public class demo07BufferedReader { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new FileReader("D:\\Eclipse\\workplace\\day1\\src\\num11\\a.txt")); //调用字符缓冲输入流中的方法read/readLine读取文本 /* String line = br.readLine(); System.out.println(line); line = br.readLine(); System.out.println(line); line = br.readLine(); System.out.println(line); line = br.readLine(); System.out.println(line); //null 已经到达末尾 */ //循环优化(行数未知 -- while) /* String line = br.readLine(); while(line != null) { System.out.println(line); line = br.readLine(); } */ String line; while((line = br.readLine()) != null) { System.out.println(line); } br.close(); } } 文本排序案例 /* 练习: 对文本内容进行排序(1,2,3...) 分析: 1 创建一个HashMap集合对象,存储每行文本的序号(1,2,3...)value存储每行的文本 2 创建字符缓冲输入流的对象,构造方法中绑定字符输入流 3 创建字符缓冲输出流对象,构造方法中绑定字符输出流 4 使用字符缓冲输入流中的方法readline逐行读取文本 5 对读取到的文本进行切割,获取行中的序号和文本内容 6 把切割好的序号和文本的内容存储到hashMap集合中(key序号是有序的,会自动排序1,2,3...) 7 遍历HaspMap集合,获取每一个键值对 8 把每一个键值对,拼接为一个文本行 9 把拼接好的文本行使用字符缓冲输出流中的方法write写到文件中 10 释放资源 */ public class demo08Sort { public static void main(String[] args) throws IOException { HashMap<String, String> map = new HashMap<String, String>(); BufferedReader br = new BufferedReader(new FileReader("D:\\Eclipse\\workplace\\day1\\src\\num11\\in.txt")); BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\Eclipse\\workplace\\day1\\src\\num11\\out.txt")); String line; while((line = br.readLine())!=null) { //readLine返回包含该行内容的字符串,不包含任何行终止符 //5 对读取到的文本进行切割,获取行中的序号和文本内容 String[] arr = line.split("\\."); //转义字符加\\ map.put(arr[0], arr[1]); //arr[0]序号, arr[1]文本 } //7 遍历HaspMap集合,获取每一个键值对 for (String key : map.keySet()) { //key会自动排序 String value = map.get(key); //8 把每一个键值对,拼接为一个文本行 line = key + "." + value; //9 把拼接好的文本行使用字符缓冲输出流中的方法write写到文件中 bw.write(line); //line没有读取换行 bw.newLine(); //写换行 } bw.close(); br.close(); } }
    Processed: 0.012, SQL: 9