案例需求:
将键盘录入的用户名和密码保存到本地实现永久化存储
实现步骤
代码实现:
package com.hcx;import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;public class Demo4 {public static void main(String[] args) throws IOException {Scanner scanner = new Scanner(System.in);System.out.println("请录入用户名:");String username = scanner.next();System.out.println("请录入密码:");String password = scanner.next();FileWriter fileWriter = new FileWriter("a.txt");fileWriter.write(username);fileWriter.write("\r\n");fileWriter.write(password);fileWriter.flush();fileWriter.close();}
}
输入用户名和密码:

运行成功后当前模块下的 a.txt 文件的内容

上次我们讲字节流的时候提到过字节缓冲流,它可以提高字节输入流和字节输出流读数据和写数据的效率,同样字符流也有提高效率的字符缓冲流。
字符缓冲流介绍
BufferedWriter:
将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入,可以指定缓冲区大小,或者可以接受默认大小。默认值足够大,可用于大多数用途。
BufferedReader:
从字符输入流读取文本,缓冲字符,以提供字符,数组,和行的高效读取,可以指定缓冲区大小,或者可以使用默认大小。默认值足够大可用于大多数用途。
构造方法
| 方法名 | 说明 |
|---|---|
| BufferedWriter(Writer out) | 创建字符缓冲输出流对象 |
| BufferedReader(Reader in) | 创建字符缓冲输入流对象 |
package com.hcx;import java.io.*;public class Demo5 {public static void main(String[] args) throws IOException {BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("bw.txt"));bufferedWriter.write("hello\r\n");bufferedWriter.write("world\r\n");bufferedWriter.close();BufferedReader bufferedReader = new BufferedReader(new FileReader("bw.txt"));//一次读取一个字符数据
// int ch;
// while ((ch = bufferedReader.read()) != -1) {
// System.out.println((char) ch);
// }// 一次读取一个字符数组数据char[] chars = new char[1024];int len;while ((len = bufferedReader.read(chars)) != -1) {System.out.println(new String(chars, 0, len));}bufferedReader.close();}
}
| 方法名 | 说明 |
|---|---|
| void newLine() | 写一行行分隔符,行分隔符字符串由系统属性定义 |
BufferedReader:
| 方法名 | 说明 |
|---|---|
| String readLine() | 读一行文字,结果包含行的内容的字符串,不包括任何行终止字符如果流的末尾已经到达,则为 null |
package com.hcx;import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;public class Demo6 {public static void main(String[] args) throws IOException {BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("bw.txt"));bufferedWriter.write("abc");bufferedWriter.newLine();bufferedWriter.write("6666");bufferedWriter.close();}
}

package com.hcx;import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;public class Demo7 {public static void main(String[] args) throws IOException {BufferedReader bufferedReader = new BufferedReader(new FileReader("bw.txt"));String line;while((line=bufferedReader.readLine())!= null){System.out.println(line);}bufferedReader.close();}
}
运行结果

案例需求
使用字符缓冲流读取文件中的数据,排序后再次写到本地文件
实现步骤
代码演示
package com.hcx;import java.io.*;
import java.util.Arrays;public class Demo8 {public static void main(String[] args) throws IOException {//需求:读取文件中的数据,排序后再将数据写到本地文件//分析://1.要把文件中的数据读取出来BufferedReader bufferedReader = new BufferedReader(new FileReader("sort.txt"));//输出流一定不能写在这里,否则会清空文件内容String line = bufferedReader.readLine();System.out.println("读到的数据为:" + line);bufferedReader.close();//2.按照空格进行切割String[] split = line.split(" ");//3.把字符串数组类型变为 int 类型int[] arr = new int[split.length];//遍历 split 数组,可以进行类型转换for (int i = 0; i < arr.length; i++) {String smallStr = split[i];//类型转换int number = Integer.parseInt(smallStr);//把转换后的结果存到 arr 中arr[i] = number;}//4.排序Arrays.sort(arr);System.out.println(Arrays.toString(arr));//5.把排序之后结果写回到本地 1 2 3 4...BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("sort.txt"));//写出for (int i = 0; i < arr.length; i++) {bufferedWriter.write(arr[i] + " ");bufferedWriter.flush();}//释放资源bufferedWriter.close();}
}

运行

排序后的 sort.txt 文件中的数据

