文章目录
- 字符流用户注册案例
- 字符缓冲流
- 字符缓冲流特有功能
- 字符缓冲流操作文件中的数据排序案例
- IO流小结
字符流用户注册案例
-
案例需求:
将键盘录入的用户名和密码保存到本地实现永久化存储
-
实现步骤
- 获取用户输入的用户名和密码(这里使用 scanner 键盘录入)
- 将用户输入的用户名和密码写入到本地文件中
- 关流,释放资源
-
代码实现:
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();
}
}
字符缓冲流特有功能
- 方法介绍
BufferedWriter:
方法名 | 说明 |
---|---|
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 文件中的数据
-
运行
-
排序后的 sort.txt 文件中的数据