自带8k缓冲区
目录
字符缓冲输入流 :BufferedReader
作用:提高字符输入读取数据的性能,比原始流新增读行数据的功能
构造器
public BufferReader(Reader r) 把原始字符输入流包装成字符缓冲输入流
新增功能
public String ReadLine() 读取一行数据返回,如果读取没有完毕,无行可读返回null
注意:一次读一行 没有内容了返回null ,如果遇见空行下面没有内容,就不算空行,如果下面还有内容就把空行打印出来
package 字符缓冲流;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStream;
import java.io.Reader;
public class Test {
public static void main(String[] args) {
try(Reader r=new FileReader("src/qqq.txt"); //相对路径
BufferedReader br=new BufferedReader(r);)//因为要用私有方法这里就不用多态写了)
{
String s=br.readLine();//一次读一行 没有内容了返回null ,如果遇见空行下面没有内容,就不算空行,如果下面还有内容就把空行打印出来
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
}
}
经典代码用行读文本
package 字符缓冲流;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.Reader;
public class Test2 {
//用行读取字符
public static void main(String[] args) {
try(Reader r=new FileReader("src/qqq.txt"); //相对路径
BufferedReader br=new BufferedReader(r);)//因为要用私有方法这里就不用多态写了)
{
String s;
while((s=br.readLine())!=null) {
System.out.println(s); //不会自动换行,所以要用println
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
字符缓冲输出流BufferedWriter
提高字符输出流的性能, 新增 了换行功能
构造器
public Bufferedwriter(Writer w) 把原始字符输出管道包装成字符缓冲输出管道提高性能
新增方法
public void newLIne( ) 换行
比之前的换行("\r\n") 性能好
package 字符缓冲流;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.Writer;
public class Test3 {
public static void main(String[] args) {
try (Writer w=new FileWriter("D:/ppp.txt",true ); //原始管道; 是否是追加管道,也要在原始管道上写true 才管用
BufferedWriter bw=new BufferedWriter(w);// 包装 成缓冲管道
){
bw.write("aaaaaaaa");
bw.newLine(); //换行
bw.write(48);
bw.write("\r\n"); //和上面的换行一样 ,性能稍微差点
bw.write("dhfadfjlsd".toCharArray());
System.out.println("写成功了");
} catch (Exception e) {
e.printStackTrace();
}
}
}
对文本内容进行排序案例
排序的txt文本
文本的内容为
一:心在山东身在吴,
二:飘蓬江海漫嗟吁。
三:他时若遂凌云志,
四:敢笑黄巢不丈夫。
步骤: 定义字符缓冲输入流读文本 ,把读来的文本放入ArrayList
自定义比较规则进行排序(对应有规律的可以直接排序,比如要是它的序号要是数字123这种,对于没有规律如国家地区这种排序,就要用到自定义比较器)
排序后用字符缓冲输出流,把文件打出即可
package 字节缓冲io流;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Tset4 {
public static void main(String[] args) {
try (BufferedReader rf=new BufferedReader(new FileReader("E:/sort/反诗.txt"));//字符缓冲输入流
BufferedWriter wf=new BufferedWriter(new FileWriter("E:/sort/new反诗.txt"));//字符缓冲输出流
){
//创建集合装数据好排序
List<String> list=new ArrayList<>();
//自定义比较规则
List<String> comp=new ArrayList<>();
Collections.addAll(comp, "一", "二", "三", "四");
//读文件
String line;
while((line=rf.readLine())!=null) {
list.add(line);
}
System.out.println("排序前"+list);
//开始排序
list.sort(new Comparator<String>() {
public int compare(String o1, String o2) {
return comp.indexOf(o1.substring(0, o1.indexOf(":")))-comp.indexOf(o2.substring(0, o2.indexOf(":")));
}//indexof返回指定元素在列表中最后一次出现的索引,如果列表中不包含该元素,则返回-1。
});
System.out.println("排序后"+list);
//输出到文件
for (String string : list) {
wf.write(string);
wf.newLine();//换行
}
System.out.println("文件顺序恢复完成");
} catch (Exception e) {
e.printStackTrace();
}
}
}