IO(字符流 字符缓冲流)

FileWriter: 作用 往文件中写入数据
使用步骤:
1.创建FW对象
FileWriter(String fileName); 要往哪个文件中写,就把对应的文件名作为参数
2.写入数据
wirte(String str); 写入字符串数据str
3.刷新
flush();
4.关闭资源
close();

绝对路径与相对路径
绝对路径: 带盘符的路径就是绝对路径 比如 E:\289\b.txt ,文件存放的位置就是我们路径所指向的位置
相对路径: 不带盘符的路径就是相对路径 比如 b.txt, 文件存放的位置,是当前工程的路径下

刷新:flush 作用是把流中的数据 刷新到文件中 ,可以在flush后面进行多次写入

close: 关闭资源, 在关闭资源之前自动执行一次刷新 , 一旦关闭流 就不能再写入

FileWriter 写数据的 5 个方法
void write(String str) // 写入一个字符串
void write(String str,int index,int len) // 写入字符串的一部分 从index开始 持续len个
void write(int ch) // 写入一个字符, 使用int的原因,也可以写入对应字符的unicode码 a---> 97 , b --> 98
void write(char[] chs)// 把数组chs中的数据写入到文件
void write(char[] chs,int index,int len) // 把数组chs中一部分数据 写入到文件 从index开始,持续len个

换行符
windows:
linux :
Mac :

构造方法
new FileWriter("test04.txt"); 覆盖式 ; 新数据把文件原有的数据全都覆盖掉
new FileWriter(String fileName, boolean append); 当append为true的时候就表示追加, 否则表示覆盖

FileReader作用: 从文件中读取数据
使用步骤:
1.创建FR对象
FileReader(String fileName); 把指定的文件名当做参数传递
2.调用方法读取数据
int read(); 一次读取一个字符,并把这个字符作为返回值 ,当数据读取完毕时返回的结果-1
int read(char[] chs); 一次读取一个字符数组,把读取到的数据存放到chs数组中 ,返回的是本次读取的个数
3.关闭资源
close();


int read(); 一次读取一个字符 并把这个字符作为返回值

int read(char[] chs); 一次读取一个字符数组,把读取到的数据存放在chs数组中, 把本次读取到的字符个数作为返回值 ,当
数据读取完毕的时候 返回值为-1

BufferedWriter用来写入数据, 优点 更高效
使用步骤:
1.创建BW对象
BufferedWriter bw = new BufferedWriter(new FileWriter(String fileName));
2.写入数据
bw.write(String str);
3.刷新
bw.flush()
4.关闭
bw.close()
bw.newLine();// 插入一个换行, 根据不同的系统插入对应系统的换行符

BufferedReader用来读取数据 , 优点 更高效
使用步骤:
1.创建BR对象
BufferedReader br = new BufferedReader(new FileReader(String fileName));
2.读取数据
br.read()
br.read(char[] chs)
3.关闭
br.close();
readLine 一次读取一行的内容 ,但是不读取换行 ,当数据读取完毕的时候 返回null

IO代码练习
* 需求一:
* 从指定文件中 把数据读取出来 存储到集合中 并展示
*
* 1.观察文件 创建一个类 描述用户的信息
* 2.创建一个集合用来存储用户的信息
* 3.创建一个BR对象
* 4.读取文件,组成对象 添加到集合中
* 5.关闭资源
* 6.遍历并展示

 1 public static void test01() throws IOException {
 2         ArrayList<User> list = new ArrayList<User>();
 3 
 4         // 创建一个BR对象
 5         BufferedReader br = new BufferedReader(new FileReader("Users.txt"));
 6         String line;
 7         while ((line = br.readLine()) != null) {
 8             // 切割
 9             String[] uu = line.split(",");
10             User u = new User(uu[0], uu[1]);
11             list.add(u);
12         }
13         br.close();
14 
15         for (int i = 0; i < list.size(); i++) {
16             User user = list.get(i);
17             System.out.println(user.getName() + "   " + user.getPwd());
18         }
19     }

需求二:
判断指定的用户名和密码 是否在指定的文件中
让用户输入一个用户名和密码 判断这个用户名和密码是否在指定的文件中
1.观察文件 创建一个类 描述用户的信息
2.创建一个集合用来存储用户的信息
3.创建一个BR对象
4.读取文件,组成对象 添加到集合中
5.关闭资源
6.提示用户输入用户名和密码
7.拿用户输入的用户名和密码 去集合中查找, 如果找到就表示在文件中, 否则表示不在

 1 public static void test02() throws IOException {
 2         ArrayList<User> list = new ArrayList<User>();
 3 
 4         // 创建一个BR对象
 5         BufferedReader br = new BufferedReader(new FileReader("Users.txt"));
 6         String line;
 7         while ((line = br.readLine()) != null) {
 8             // 切割
 9             String[] uu = line.split(",");
10             User u = new User(uu[0], uu[1]);
11             list.add(u);
12         }
13         br.close();
14 
15         Scanner sc = new Scanner(System.in);
16         System.out.println("请输入用户名");
17         String name = sc.next();
18         System.out.println("请输入密码");
19         String pwd = sc.next();
20 
21         // 定义标记
22         int index = -1;
23         for (int i = 0; i < list.size(); i++) {
24             User user = list.get(i);
25             if (name.equals(user.getName()) && pwd.equals(user.getPwd())) {
26                 // 修改标记
27                 index = i;
28                 break;
29             }
30         }
31         // 判断笔记
32         if (index == -1) {
33             //
34             System.out.println("用户名或者密码错误");
35         } else {
36             System.out.println("恭喜你猜对了");
37         }
38 
39     }

需求三:
让用户输入一个用户名和密码 判断这个用户名和密码是否在指定的文件中 如果不在就一直猜 直到猜对为止
1.观察文件 创建一个类 描述用户的信息
2.创建一个集合用来存储用户的信息
3.创建一个BR对象
4.读取文件,组成对象 添加到集合中
5.关闭资源
6.提示用户输入用户名和密码
7.拿用户输入的用户名和密码 去集合中查找, 如果找到就表示在文件中, 否则表示不在
8.使用循环进行反复判断

 1 public static void test03() throws IOException{
 2 
 3         ArrayList<User> list = new ArrayList<User>();
 4 
 5         // 创建一个BR对象
 6         BufferedReader br = new BufferedReader(new FileReader("Users.txt"));
 7         String line;
 8         while ((line = br.readLine()) != null) {
 9             // 切割
10             String[] uu = line.split(",");
11             User u = new User(uu[0], uu[1]);
12             list.add(u);
13         }
14         br.close();
15 
16         Scanner sc = new Scanner(System.in);
17         while(true){
18             
19             System.out.println("请输入用户名");
20             String name = sc.next();
21             System.out.println("请输入密码");
22             String pwd = sc.next();
23 
24             // 定义标记
25             int index = -1;
26             for (int i = 0; i < list.size(); i++) {
27                 User user = list.get(i);
28                 if (name.equals(user.getName()) && pwd.equals(user.getPwd())) {
29                     // 修改标记
30                     index = i;
31                     break;
32                 }
33             }
34             // 判断笔记
35             if (index == -1) {
36                 //
37                 System.out.println("用户名或者密码错误 ,请重新输入用户名和密码 ");
38             } else {
39                 System.out.println("恭喜你猜对了");
40                 break;
41             }
42 
43             
44         }
45     }

需求四:
让用户输入一个用户名和密码 判断这个用户名和密码是否在指定的文件中 如果不在就一直猜 直到猜对为止 用户只能猜3次 每次失败提示还能猜几次
1.观察文件 创建一个类 描述用户的信息
2.创建一个集合用来存储用户的信息
3.创建一个BR对象
4.读取文件,组成对象 添加到集合中
5.关闭资源
6.提示用户输入用户名和密码
7.拿用户输入的用户名和密码 去集合中查找, 如果找到就表示在文件中, 否则表示不在
8.使用循环进行反复判断

 1     public static void main(String[] args) throws IOException {
 2 
 3         ArrayList<User> list = new ArrayList<User>();
 4 
 5         // 创建一个BR对象
 6         BufferedReader br = new BufferedReader(new FileReader("Users.txt"));
 7         String line;
 8         while ((line = br.readLine()) != null) {
 9             // 切割
10             String[] uu = line.split(",");
11             User u = new User(uu[0], uu[1]);
12             list.add(u);
13         }
14         br.close();
15 
16         Scanner sc = new Scanner(System.in);
17         int count = 0; 
18         while(true){
19             
20             System.out.println("请输入用户名");
21             String name = sc.next();
22             System.out.println("请输入密码");
23             String pwd = sc.next();
24             count++;
25             // 定义标记
26             int index = -1;
27             for (int i = 0; i < list.size(); i++) {
28                 User user = list.get(i);
29                 if (name.equals(user.getName()) && pwd.equals(user.getPwd())) {
30                     // 修改标记
31                     index = i;
32                     break;
33                 }
34             }
35             // 判断笔记
36             if (index == -1) {
37                 if(count < 3){
38                     System.out.println("用户名或者密码错误 ,请重新输入用户名和密码  还可以猜测的次数是 :"+(3 - count ));
39                     
40                 }else{
41                     System.out.println("别猜了 练习管理员吧 !!!");
42                     break;
43                 }
44                 //
45             } else {
46                 System.out.println("恭喜你猜对了");
47                 break;
48             }
49 
50             
51         }
52         
53     }

IO版学生管理系统

  1 public static void main(String[] args) throws IOException {
  2         String fileName = "list.txt";
  3         // 初始化数据
  4         // 创建集合容器
  5         ArrayList<Student> list = new ArrayList<Student>();
  6         //从文件中读取数据存入到集合
  7         readFromFile(list, fileName);
  8 //        // ====================测试数据===================
  9 //        Student s1 = new Student("9001", "张三", "18", "北京");
 10 //        Student s2 = new Student("9002", "张三3", "18", "北京");
 11 //        Student s3 = new Student("9003", "张三4", "18", "北京");
 12 //        list.add(s1);
 13 //        list.add(s2);
 14 //        list.add(s3);
 15 //        // ====================测试数据===================
 16 
 17         System.out.println("----------------------欢迎使用管理系统--------------------------");
 18         // 死循环
 19         while (true) {
 20             // 接收用户的选择
 21             int user = chose();
 22 
 23             // 根据用户的输入调用功能
 24             switch (user) {
 25             case 1:
 26                 show(list);
 27                 break;
 28             case 2:
 29                 add(list);
 30                 save2File(list, fileName);
 31                 break;
 32             case 3:
 33                 upd(list);
 34                 save2File(list, fileName);
 35                 break;
 36             case 4:
 37                 del(list);
 38                 save2File(list, fileName);
 39                 break;
 40             case 5:
 41                 System.out.println("欢迎下次再来哦 老板");
 42                 System.exit(0);
 43                 break;
 44 
 45             default:
 46                 System.out.println("呵呵");
 47                 break;
 48             }
 49         }
 50     }
 51     //把数据从文件中读取出来 存入到集合 
 52     public static void readFromFile(ArrayList<Student> list,String fileName) throws IOException{
 53         // 创建BR对象
 54                 BufferedReader br = new BufferedReader(new FileReader(fileName));
 55 
 56                 String line;
 57                 while ((line = br.readLine()) != null) {
 58                     // 9003,阿拉并,20,迪拜
 59                     // 把读取到的一行信息 切割成各个字段
 60                     String[] ss = line.split(",");
 61                     // 把散装的数组组成对象
 62                     Student s = new Student(ss[0], ss[1], ss[2], ss[3]);
 63                     // 把对象添加到集合中
 64                     list.add(s);
 65                 }
 66 
 67                 // 关闭资源
 68                 br.close();
 69                 System.out.println("初始化完毕");
 70     }
 71     // 把集合中的数据 写入到文件 
 72     public static void save2File(ArrayList<Student> list ,String fileName) throws IOException{
 73         //创建BW对象
 74                 BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
 75                 
 76                 //遍历集合获取学生信息, 写入到文件 
 77                 for (int i = 0; i < list.size(); i++) {
 78                     Student tmp = list.get(i);
 79                     // 9001,张三,18,北京
 80                     //使用sb按照指定的格式拼装学生的信息 
 81                     StringBuilder sb = new StringBuilder();
 82                     sb.append(tmp.getId()).append(",")
 83                     .append(tmp.getName()).append(",")
 84                     .append(tmp.getAge()).append(",")
 85                     .append(tmp.getHome());
 86                     bw.write(sb.toString());
 87                     bw.newLine();// 换行
 88                     bw.flush();
 89                 }
 90                 
 91                 //6.关闭资源 
 92                 bw.close();
 93     }
 94     
 95     
 96     public static int chose() {
 97         // 展示菜单
 98         System.out.println("====================================");
 99         System.out.println("1.展示学生信息");
100         System.out.println("2.添加学生信息");
101         System.out.println("3.修改学生信息");
102         System.out.println("4.删除学生信息");
103         System.out.println("5.退出学生信息管理系统");
104         System.out.println("请输入功能序号");
105         System.out.println("====================================");
106         // 接收用户的输入
107         Scanner sc = new Scanner(System.in);
108         return sc.nextInt();
109 
110     }
111 
112     public static void del(ArrayList<Student> list) {
113         // 提示输入学号
114         Scanner sc = new Scanner(System.in);
115         System.out.println("请输入学号");
116         String id = sc.next();
117         // 查找
118         // 查找
119         // 定义标记
120         int index = -1;
121         // 查找 关键位置修改标记
122         for (int i = 0; i < list.size(); i++) {
123             Student s = list.get(i);
124             if (id.equals(s.getId())) {
125                 // 找到
126                 index = i;
127                 break;
128             }
129         }
130         //判断标记 
131         if(index == -1){
132             System.out.println("无这个学号的学生 请重新选择功能");
133         }else{
134             //删除
135             list.remove(index);
136             System.out.println("删除完毕");
137         }
138 
139     }
140 
141     public static void upd(ArrayList<Student> list) {
142         // 提示输入学号
143         Scanner sc = new Scanner(System.in);
144         System.out.println("请输入学号");
145         String id = sc.next();
146         // 查找
147         // 定义标记
148         int index = -1;
149         // 查找 关键位置修改标记
150         for (int i = 0; i < list.size(); i++) {
151             Student s = list.get(i);
152             if (id.equals(s.getId())) {
153                 // 找到
154                 index = i;
155                 break;
156             }
157         }
158         // 判断标记
159         if (index == -1) {
160             // 没找到
161             System.out.println("没有这个学号的学生 请重新选择功能  ");
162         } else {
163             System.out.println("请输入新姓名");
164             String name = sc.next();
165             System.out.println("请输入新年龄");
166             String age = sc.next();
167             System.out.println("请输入新家乡");
168             String home = sc.next();
169             Student s = new Student(id, name, age, home);
170             list.set(index, s);
171             System.out.println("修改完毕");
172         }
173 
174     }
175 
176     public static void add(ArrayList<Student> list) {
177         // 提示输入学号
178         Scanner sc = new Scanner(System.in);
179         System.out.println("请输入学号");
180         String id = sc.next();
181         // 去重
182         while (true) {
183             // 拿着用户输入的id去集合中查找,如果没有相等的id说明合法, 否则提示不合法并继续输入继续去重,直到合法位置
184             // 定义标记
185             int index = -1;
186             // 查找 关键位置改变标记
187             for (int i = 0; i < list.size(); i++) {
188                 Student student = list.get(i);
189                 if (id.equals(student.getId())) {
190                     // 有重复
191                     index = i;
192                     break;
193                 }
194             }
195             // 判断标记
196             if (index == -1) {
197                 // 无重复
198                 break;
199             } else {
200                 // 有重复
201                 System.out.println("您输入的学号 重复了  请重新输入学号");
202                 id = sc.next();
203             }
204         }
205 
206         System.out.println("请输入姓名");
207         String name = sc.next();
208         System.out.println("请输入年龄");
209         String age = sc.next();
210         System.out.println("请输入家乡");
211         String home = sc.next();
212         Student s = new Student(id, name, age, home);
213         list.add(s);
214         System.out.println("添加完毕");
215     }
216 
217     public static void show(ArrayList<Student> list) {
218         // 判断
219         if (list.size() == 0) {
220             System.out.println("系统中无学生信息, 请选择添加");
221         } else {
222             System.out.println("===================学生信息如下======================");
223             System.out.println("学号		姓名		年龄		家乡");
224             for (int i = 0; i < list.size(); i++) {
225                 Student s = list.get(i);
226                 System.out.println(s.getId() + "		" + s.getName() + "		" + s.getAge() + "		" + s.getHome());
227             }
228         }
229         System.out.println("展示完毕");
230     }
原文地址:https://www.cnblogs.com/caigq/p/6985994.html