字符缓冲流(包含案例对文本内容进行排序)

本文介绍了如何使用BufferedReader高效读取文本,BufferedWriter优化字符输出,并展示了如何对文本内容按序号排序的实例。通过BufferedReader和BufferedWriter,提升IO操作效率,同时探讨了自定义比较规则进行复杂排序的方法。
摘要由CSDN通过智能技术生成

自带8k缓冲区

目录

字符缓冲输入流 :BufferedReader

构造器

新增功能

经典代码用行读文本

字符缓冲输出流BufferedWriter

构造器

新增方法

对文本内容进行排序案例


字符缓冲输入流 :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();
		}
		

	}

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小萌新上大分

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值