几道关于IO流的题

 

//1、字符输出流写出字符数据
//项目需求:请用户从控制台输入信息,程序将信息存储到文件Info.txt中。可以输入多条信息,每条信息存储一行。当用户输入:”88”时,程序结束。
第一次写的代码:
Scanner sc = new Scanner(System.in);
 while (true) {
     System.out.println("请输入信息;输入88结束");
     String s = sc.nextLine();
     FileWriter w = new FileWriter("D:/aaa/info.txt",true);
     
    /* w.write(s);
     w.write("\r\n");
     w.flush();      // todo 能不写flush()就不写
     if (s.equals("886")) {
         w.close();
         return;
     }
    */
     // 改进:
     w.write(s);
     w.write("\r\n");
     if ("88".equals(s)) { // 常量最好写在equals前面
         break;
     }
     w.close();
     
    // 这一小块代码虽然改进但是整体代码还是有bug,题目没说要追加写进文件,我在创建new FileWriter对象时候要是不写true条件的话,写不进去文件里面,
    
 }

重写后的代码如下:

Scanner sc = new Scanner(System.in);
FileWriter w = new FileWriter("d:/aaa/info.txt");
try (sc; w) {
    while (true) {
        System.out.println("请输入信息:");
        String s = sc.nextLine();

        //  w.write(s);
        //  w.write("\r\n"); todo 如果写在这个位置 那么结束语句也会写进文本里面
        if ("88".equals(s)) {
            return;
        }
        w.write(s);
        w.write("\r\n");
    }
    // w.close(); // 不用自己手动关闭 jdk9.0对IO流优化过了,会自动关闭。
}
// 2、字节输出流写出数据
// 从控制台循环接收用户录入的学生信息,输入格式为:学号-学生名字
// 将学生信息保存到D盘下面的stu.txt文件中,一个学生信息占据一行数据。
// 当用户输入end时停止输入。
Scanner sc = new Scanner(System.in);
FileOutputStream out = new FileOutputStream("d:/stu.txt");
try (out; sc) { // 使用jdk9对IO流的优化 不用自己手动关闭流 好用
    while (true) {
        System.out.println("输入学生信息,格式:学号-姓名:");
        String s = sc.nextLine();
        if ("end".equals(s)) {
            return;
        }
        out.write(s.getBytes());
        out.write("\r\n".getBytes());
    }
} catch (IOException e) {
    e.printStackTrace();
}
// 3、字符输出流写出字符数据并存到集合中
 // 需求说明:从控制台接收3名学员的信息,每条信息存储到一个Student对象中,
 // 将多个Student对象存储到一个集合中。输入完毕后,将所有学员信息存储到文件Student.txt中。每名学员信息存储一行,多个属性值中间用逗号隔开。 
Scanner sc = new Scanner(System.in);
FileOutputStream out = new FileOutputStream("d:/stu.txt");
try (out; sc) { // 使用jdk9对IO流的优化 不用自己手动关闭流 好用
    while (true) {
        System.out.println("输入学生信息,格式:学号-姓名:");
        String s = sc.nextLine();
        if ("end".equals(s)) {
            return;
        }
        out.write(s.getBytes());
        out.write("\r\n".getBytes());
    }
} catch (IOException e) {
    e.printStackTrace();
}

发表评论