zoukankan      html  css  js  c++  java
  • 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     }
  • 相关阅读:
    【2016-10-27】【坚持学习】【Day14】【VS 配置管理器 AssemblyInfo 】
    【2016-10-26】【坚持学习】【Day13】【WCF】【EF + Data Services】
    【2016-10-25】【坚持学习】【Day12】【WPF】【Telerik】【VirtualtionData 虚拟化数据】
    【2016-10-24】【坚持学习】【Day11】【WPF】【MVVM】
    【2016-10-20】【坚持学习】【Day10】【反射2】
    【2016-10-17】【坚持学习】【Day9】【反射】
    【2016-10-17】【坚持学习】【Day8】【抽象工厂模式】
    【2016-10-17】【坚持学习】【Day8】【工厂方法模式】
    【2016-10-17】【坚持学习】【Day8】【简单工厂模式】
    【2016-10-16】【坚持学习】【Day7】【建造者模式】
  • 原文地址:https://www.cnblogs.com/caigq/p/6985994.html
Copyright © 2011-2022 走看看