20220519_缓冲字符流

txt内容

Line1:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line2:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line3:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line4:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line5:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line6:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line7:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line8:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line9:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line10:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line11:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line12:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line13:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line14:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line15:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line16:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line17:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line18:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line19:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line20:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line21:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line22:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line23:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line24:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line25:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line26:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line27:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line28:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line29:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line30:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line31:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

Line32:
!@#$%^&*()-=[]\;'./,ABCD1234abcd

缓冲字符输入流

public class BufferedCharDemo1 {
    public static void main(String[] args) {
        try (Reader fr = new FileReader("CertExam\\src\\dataTest1.txt");
             BufferedReader bis = new BufferedReader(fr)
        ) {
//            System.out.println(bis.readLine());
//            System.out.println(bis.readLine());
//            System.out.println(bis.readLine());
//            System.out.println(bis.readLine());
//            System.out.println("I read empty line also");
            char[] chars = new char[1024];//read 1024 chars per time
            int num;
            while ((num = bis.read(chars)) != -1){
                String str = new String(chars,0,num);
                System.out.println(str);
            }
//            String lineContent;
//            while ((lineContent = bis.readLine()) != null){
//                System.out.println(lineContent);
//                /** 这里不要在括号里写bis.readLine()了,就用变量lineContent*/
//            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

缓冲字符输出流

public class BufferedWriterDemo2 {
    public static void main(String[] args) {
        try (Writer wr = new FileWriter("CertExam\\src\\dataTest3.txt");
             BufferedWriter bwr = new BufferedWriter(wr))
        {
            bwr.write('9');
            bwr.write('A');
            bwr.write('@');
            bwr.write(98);//字符编号不需要单引号

            bwr.write("你好java");
            bwr.write("你好java");
            bwr.newLine();
            /**bwr有一个newline()换行,不用像纯Writer那样写wr.write("\r\n")了*/
            bwr.write("你好java");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

杜甫诗案例
txt内容

08.布衾多年冷似铁⑽,娇儿恶卧踏里裂⑾。
03.八月秋高风怒号⑴,卷我屋上三重茅⑵。
01.茅屋为秋风所破歌
10.自经丧乱少睡眠⒁,长夜沾湿何由彻⒂!
05.南村群童欺我老无力,忍能对面为盗贼⑸。
12.呜呼⒅!何时眼前突兀见此屋⒆,吾庐独破受冻死亦足⒇!
07.俄顷风定云墨色⑻,秋天漠漠向昏黑⑼。
06.公然抱茅入竹去⑹,唇焦口燥呼不得⑺,归来倚杖自叹息。
02.
04.茅飞渡江洒江郊,高者挂罥长林梢⑶,下者飘转沉塘坳⑷。
09.床头屋漏无干处⑿,雨脚如麻未断绝⒀。
11.安得广厦千万间⒃,大庇天下寒士俱欢颜⒄,风雨不动安如山。

以上文本用缓冲字符流排序后控制台输出打印代码如下

public class BufferCharDemo3 {
    public static void main(String[] args) {
        try (Reader fr = new FileReader("CertExam\\src\\dufu");
             BufferedReader br = new BufferedReader(fr)

        ) {
            List<String> article = new ArrayList<>();
            String lineContent;
            while ((lineContent = br.readLine()) != null){
                article.add(lineContent);
            }
            article.sort(String::compareTo);
//            Collections.sort(article);
            /** 用这一句和上一句,都是默认0到9排序,效果一样,10以上就排错,要在编号前面加0*/

            System.out.println(article);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

输出到新文本文件代码如下

public class BufferCharDemo4 {
    public static void main(String[] args) {
        try (Reader fr = new FileReader("CertExam\\src\\dufu");
             BufferedReader br = new BufferedReader(fr);
             Writer wr = new FileWriter("CertExam\\src\\dufu2");
             BufferedWriter bw = new BufferedWriter(wr)
        ) {
            List<String> article = new ArrayList<>();
            String lineContent;
            while ((lineContent = br.readLine()) != null){
                article.add(lineContent);
            }
            article.sort(String::compareTo);
            for (String s : article) {
                bw.write(s+"\r\n");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}```

改进后的txt文本

.布衾多年冷似铁⑽,娇儿恶卧踏里裂⑾。
三.八月秋高风怒号⑴,卷我屋上三重茅⑵。
一.茅屋为秋风所破歌
十.自经丧乱少睡眠⒁,长夜沾湿何由彻⒂!
五.南村群童欺我老无力,忍能对面为盗贼⑸。
十二.呜呼⒅!何时眼前突兀见此屋⒆,吾庐独破受冻死亦足⒇!
七.俄顷风定云墨色⑻,秋天漠漠向昏黑⑼。
六.公然抱茅入竹去⑹,唇焦口燥呼不得⑺,归来倚杖自叹息。
二..茅飞渡江洒江郊,高者挂罥长林梢⑶,下者飘转沉塘坳⑷。
九.床头屋漏无干处⑿,雨脚如麻未断绝⒀。
十一.安得广厦千万间⒃,大庇天下寒士俱欢颜⒄,风雨不动安如山。

缓冲流输出到新文件代码如下

public class BufferCharDemo5 {
    public static void main(String[] args) {
        try (Reader fr = new FileReader("CertExam\\src\\dufu1");
             BufferedReader br = new BufferedReader(fr);
             Writer wr = new FileWriter("CertExam\\src\\dufu3");
             BufferedWriter bw = new BufferedWriter(wr);
        ) {
            List<String> article = new ArrayList<>();
            List<String> ordered = new ArrayList<>();
            /**批量添加要用Collections.addAll方法*/
            Collections.addAll(ordered,"一","二","三","四","五","六","七","八","九","十","十一","十二");
            String lineContent;
            while ((lineContent = br.readLine()) != null){
                article.add(lineContent);
            }
            /**
             * 这句lambda意思就是拿o1,o2的开头部分决定它们的顺序
             * o1,o2的开头部顺序由它们在order集合里的顺序决定
             * 下面这句也可写作,Collections.sort(article,new Comparator)
             * 然后又被精简成了最后极其精简的一句,然后我又精简成了split的一句
             */
//            article.sort((o1, o2) ->
//                    ordered.indexOf(o1.substring(0,o1.indexOf("."))) - ordered.indexOf(o2.substring(0,o2.indexOf(".")))
//                    );
//            article.sort(Comparator.comparingInt(o -> ordered.indexOf(o.substring(0, o.indexOf(".")))));
            article.sort(Comparator.comparingInt(o -> ordered.indexOf(o.split("\\.",2)[0])));

            for (String s : article) {
                bw.write(s+"\r\n");

                String[] stArr = s.split("\\.",2);
                System.out.println(stArr[0]);
                /**实践证明,用split可以把分开点两边的文字,但split生成的是字符串Array,写入Lambda不会更好读*/
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值