IO流
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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: \\r\\n
linux : \\n
Mac : \\r
构造方法
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("学号\\t\\t姓名\\t\\t年龄\\t\\t家乡"); 224 for (int i = 0; i < list.size(); i++) { 225 Student s = list.get(i); 226 System.out.println(s.getId() + "\\t\\t" + s.getName() + "\\t\\t" + s.getAge() + "\\t\\t" + s.getHome()); 227 } 228 } 229 System.out.println("展示完毕"); 230 }
http://www.cnblogs.com/caigq/p/6985994.html
以上是关于IO流的主要内容,如果未能解决你的问题,请参考以下文章
此应用小部件片段中所有意图 (PendingIntents) 的逻辑流
JAVA IO流相关代码(Serializable接口,管道流PipedInputStream类,RandomAccessFile类相关代码)