需求:读取文件中的数据排序后再次写到本地
译:1.读取(读取文本中的数据,用字符输入流,缓冲字符输入流(辅))文件数据:
3 6 5 2 1 4 7 8
2.排序
3.写回本地
public class charStreamDemo13{
public static void main(String[] args){
//创缓冲字符输入流对象
BufferedReader br=new BufferedReader(new FileReader("charstream\\a.txt"));
//读取数据
String line;
while((line=br.readLine())!=null){
System.out.println(line);//3 6 5 2 1 4 7 8
}
br.close();
//进行排序,String,int类型没有排序,丢进数组 Arrays.sort(arr);
String[] arr=line.split(" ");
Arrays.sort(arr);
//排好序之后,就写进本地文件
//创建缓冲字符输出流对象
BufferedWriter bw=new BufferedWriter(new FileWriter("charstream\\a.txt"));
for(int i=0;i<arr.length;i++){
sout(arr[i]+" ");
bw.flush();
}
bw.close();
}
}
出现问题:
Q1: a.txt:36521478
控制台:36521478
A1:"36521478" 当成一个字符串,丢进数组,lenth=1,索引:0
Q2:
运行一次后:控制台保留原a.txt内容,a.txt内容更变:12345678
A2:
打开代码:
再运行一次: 37行加上空格
Q3:代码运行出现空指针异常
A3:可能是a.txt中:3 6 5 2 1 4 7 8
br.close():结束读取,打印:3 6 5 2 1 4 7 8
按照空格把line装进数组,8的后面全是空格,没有数据
在后面BufferedWriter,for循环遍历完 ,会出现空指针异常索引越界,第22行和27for循环有问题,第28行Arrays.sort(arr);没执行
注意:
1.int,string没有排序方法,Arrays.sort(arr);数组有
2.int没有split方法,string有
3.
4.
遗留问题:
视频代码:
package com.itheima.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.util.Arrays; public class charStreamDemo13 { public static void main(String[] args) throws Exception { //9 1 2 5 3 10 4 6 7 8 //需求:1.读取文件中的数据91253104678 1.空格分开 2.排序后 3.再次写到本地 //读取数据 用字符输入流:FileReader(主要),BufferedFileReader() BufferedReader br = new BufferedReader(new FileReader("charstream\\a.txt")); String line = br.readLine(); System.out.println(line);//先读一行3 6 5 2 1 4 7 8 br.close(); //空格分开 String[] lineArr = line.split(" ");//按照空格丢进数组里 //数组类型String变成int int[] arr=new int[lineArr.length]; for (int i = 0; i < lineArr.length; i++) { String s=lineArr[i]; int num=Integer.parseInt(s); arr[i]=num; } //4.排序 Arrays.sort(arr); //Arrays.toString(arr); System.out.println(Arrays.toString(arr)); // 5.排序之后的结果写回本地 BufferedWriter bw = new BufferedWriter(new FileWriter("charstream\\a.txt")); for (int i = 0; i < arr.length; i++) { bw.write(arr[i] + " "); bw.flush(); } bw.close(); } }