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();
}
}
}