Buffer高效字符流
阅读:285目录介绍
- 01.什么是高效字符流
- 02.字符缓冲流BufferedReader
- 03.字符缓冲流BufferedWriter
- 04.字符缓冲流的特殊功能
- 05.高效字符流复制文本文件
- 06.集合数据存储到文本文件
- 07.文本数据存储到集合中
- 08.随机获取文本中姓名
- 09.录入信息并且写入文件
02.字符缓冲流BufferedReader
- 代码如下所示
/** * 使用高效的字符输入流进行读取数据 * @throws IOException */ private static void read() throws IOException{ // 创建高效的字符输入流对象 // public BufferedReader(Reader in) // BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("c.txt"))) ; BufferedReader br = new BufferedReader(new FileReader("c.txt")) ; // 读取数据 // int ch = 0 ; // while((ch = br.read()) != -1){ // System.out.print((char)ch); // } char[] chs = new char[1024] ; int len = 0 ; while((len = br.read(chs)) != -1){ System.out.print(new String(chs , 0 , len)); } // 释放资源 br.close() ; }
03.字符缓冲流BufferedWriter
- 代码如下所示
/** * 使用高效的字符输出流进行写数据 * @throws IOException */ private static void write() throws IOException { // 创建BufferedWriter对象 // public BufferedWriter(Writer out) // OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("c.txt")) ; // BufferedWriter bw = new BufferedWriter(osw) ; // BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("c.txt"))) ; BufferedWriter bw = new BufferedWriter(new FileWriter("c.txt")) ; // 写数据 bw.write("你好") ; // 释放资源 bw.close() ; }
04.字符缓冲流的特殊功能
- 如下所示
BufferedWriter: public void newLine():根据系统来决定换行符 BufferedReader: public String readLine():一次读取一行数据 包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
05.高效字符流复制文本文件
- FileWriter和FileReader复制文本文件,一次读取一个字符数组复制文件
public class CopyFileDemo { public static void main(String[] args) throws IOException { // 创建高效的字符输入流对象 BufferedReader br = new BufferedReader(new FileReader("OutputStreamWriterDemo.java")) ; // 创建高效的字符输出流对象 BufferedWriter bw = new BufferedWriter(new FileWriter("copyFile3.java")) ; // 一次读取一个字符数组复制文件 char[] chs = new char[1024] ; int len = 0; while((len = br.read(chs)) != -1){ bw.write(chs, 0, len) ; } // 释放资源 bw.close() ; br.close() ; } }
- 字符缓冲流的特殊功能复制文本文件,一次读取一行复制文件
public class CopyFileDemo { public static void main(String[] args) throws IOException { /** * 需求: 使用高效的字符流中特有的功能复制文本文件 */ // 创建高效的字符输入流对象 BufferedReader br = new BufferedReader(new FileReader("OutputStreamWriterDemo.java")) ; // 高效的字符输出流对象 BufferedWriter bw = new BufferedWriter(new FileWriter("copyFile4.java")) ; // 复制文件 // 一次读取一行复制文件 String line = null ; while((line = br.readLine()) != null) { bw.write(line) ; bw.newLine() ; bw.flush() ; } // 释放资源 bw.close() ; br.close() ; } }
06.集合数据存储到文本文件
- 把集合中的数据存储到文本文件
public static void main(String[] args) throws IOException { /** * 把ArrayList集合中的数据存储到文本文件中 * 分析: * 1: 创建ArrayList集合对象 * 2: 添加数据 * 3: 创建高效的字符输出流对象 * 4: 遍历集合,获取每一个元素,然后通过流对象写出去 * 5: 释放资源 */ // 创建ArrayList集合对象 ArrayList<String> al = new ArrayList<String>() ; // 添加数据 al.add("西施") ; al.add("貂蝉") ; al.add("杨玉环") ; al.add("王昭君") ; // 创建高效的字符输出流对象 BufferedWriter bw = new BufferedWriter(new FileWriter("names.txt")) ; // 遍历集合,获取每一个元素,然后通过流对象写出去 for(String name : al) { bw.write(name) ; bw.newLine() ; bw.flush() ; } // 释放资源 bw.close() ; }
07.文本数据存储到集合中
- 把文本文件中的数据存储到集合中
public static void main(String[] args) throws IOException { /** * 从文本文件中读取数据(每一行为一个字符串数据)到集合中,并遍历集合 * 分析: * 1: 创建高效的字符输入流对象 * 2: 创建集合对象 * 3: 读取文本文件中的数据,将数据存储到集合中 * 4: 释放资源 * 5: 遍历集合 */ // 1: 创建高效的字符输入流对象 BufferedReader br = new BufferedReader(new FileReader("names.txt")) ; // 2: 创建集合对象 ArrayList<String> al = new ArrayList<String>() ; // 3: 读取文本文件中的数据,将数据存储到集合中 String line = null ; // 作用: 用来记录读取到的行数据 while((line = br.readLine()) != null) { al.add(line) ; } // 4: 释放资源 br.close() ; // 5: 遍历集合 for(String name : al) { System.out.println(name); } }
08.随机获取文本中姓名
- 随机获取文本文件中的姓名
public static void main(String[] args) throws IOException { // 1: 创建集合对象 ArrayList<String> students = new ArrayList<String> () ; // 2: 创建BufferedReader对象 BufferedReader br = new BufferedReader(new FileReader("students.txt")) ; // 3: 读取数据,把数据存储到集合中 String line = null ; while((line = br.readLine()) != null) { students.add(line) ; } // 4: 释放资源 br.close() ; // 5: 生成一个随机数 Random random = new Random() ; int index = random.nextInt(students.size()); // 6: 把生成的随机数作为集合元素的索引,来获取一个元素 String name = students.get(index) ; // 7: 把获取到的元素打印到控制台 System.out.println(name); }
09.录入信息并且写入文件
- 键盘录入学生信息按照总分排序并写入文本文件
public static void main(String[] args) throws IOException { /** * 需求:键盘录入3个学生信息(姓名,语文成绩(chineseScore),数学成绩(mathScore),英语成绩(englishScore)),按照总分从高到低存入文本文件 * 分析: * 1: 创建一个学生类 * 2: 创建一个集合对象TreeSet集合 * 3: 键盘录入学生信息,把学生信息封装到学生对象中,然后把学生对象添加到集合中 * 4: 创建一个高效的字符输出流对象 * 5: 遍历集合,获取每一个元素,把其信息写入到文件中 * 6: 释放资源 */ // 创建一个集合对象TreeSet集合 TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() { @Override public int compare(Student s1, Student s2) { // 总分 int num = s2.getTotalScore() - s1.getTotalScore() ; // 比较姓名 int num2 = (num == 0) ? s2.getName().compareTo(s1.getName()) : num ; // 返回 return num2; } }) ; // 3: 键盘录入学生信息,把学生信息封装到学生对象中,然后把学生对象添加到集合中 for(int x = 1 ; x <= 3 ; x++) { // 创建Scanner对象 Scanner sc = new Scanner(System.in) ; System.out.println("请您输入第" + x + "个学生的姓名" ); String sutName = sc.nextLine() ; System.out.println("请您输入第" + x + "个学生的语文成绩" ); int chineseScore = sc.nextInt() ; System.out.println("请您输入第" + x + "个学生的数学成绩" ); int mathScore = sc.nextInt() ; System.out.println("请您输入第" + x + "个学生的英语成绩" ); int englishScore = sc.nextInt() ; // 把学生的信封装到一个学生对象中 Student s = new Student() ; s.setName(sutName) ; s.setMathScore(mathScore) ; s.setChineseScore(chineseScore) ; s.setEnglishScore(englishScore) ; // 把学生的信息添加到集合中 ts.add(s) ; } // 创建一个高效的字符输出流对象 BufferedWriter bw = new BufferedWriter(new FileWriter("student.info")) ; bw.write("==========================================学生的信息如下====================================================") ; bw.newLine() ; bw.flush() ; bw.write("姓名\t\t总分\t\t数学成绩\t\t语文成绩\t\t英语成绩\t\t") ; bw.newLine() ; bw.flush() ; for(Student t : ts) { bw.write(t.getName() + "\t\t" + t.getTotalScore() + "\t\t" + t.getMathScore() + "\t\t" + t.getChineseScore() + "\t\t" + t.getEnglishScore()) ; bw.newLine() ; bw.flush() ; } // 释放资源 bw.close() ; }
赞赏支持
