Java程序员_编程开发学习笔记_网站安全运维教程_渗透技术教程

Java IO流实战:用户信息录入与文件保存全解析

阿贵
8月31日发布 /正在检测是否收录...
温馨提示:
本文最后更新于2025年08月31日,已超过7天没有更新,若内容或图片失效,请留言反馈。

Java IO流实战:用户信息录入与文件保存全解析

93.png

一、原题完整代码呈现

以下是计算机二级Java考试中关于IO流操作、输入验证及异常处理的典型题型,主要考察缓冲流创建、方法参数传递、文件写入及异常捕获,包含6处需要填写的空白(标记为//*********Found**********):

import java.io.*;
import java.util.Vector;

public class Java_2{
   public static void main(String s[]){
      Vector v=new Vector();
      try{
         //*********Found**********
         BufferedReader in = new ____________________(new InputStreamReader(System.in));    //键盘输入
         String str = "";
         System.out.println("请输入用户和密码信息,中间用空格隔开,输入quit退出:");
         while (!(str.equals("quit")||str.equals("QUIT"))){
            str = in.readLine();
            //*********Found**********
            if(isValid(______________________))      //验证输入是否有空格
               v.add(str);
            else{
               if(!(str.equals("quit")||str.equals("QUIT")))
                  System.out.println("The string is NOT valid!");
            }
         }
            
         System.out.println("请输入保存到的文件名:");
         //*********Found**********
         str=_______________.readLine();

         String curDir = System.getProperty("user.dir");
         File savedfile=new File(curDir+"\\"+str);
            
         //*********Found**********
         BufferedWriter out = new BufferedWriter(new FileWriter(___________________));
         for(int i=0; i<v.size(); i++){
            String tmp=(String)v.elementAt(i);
            out.write(tmp);
            //*********Found**********
            out.write(____________________);      //换行
         }
         out.close();
        
      }
      //*********Found**********
      ________________(Exception e){
         System.out.print("ERROR:"+e.getMessage());    
      }
   }
   /**
   * 判定输入的字符串是否符合规范
   * @param  s  输入的待校验的字符串
   * @return    校验的结果,正确则返回为真
   */
   public static boolean isValid(String s){
      if(s.indexOf(" ")>0) return true;
      else return false;
   }
}

二、空白处逐一解析与解答

1. 第一处空白:创建BufferedReader对象

答案:BufferedReader

//*********Found**********
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

解析
BufferedReader是带缓冲区的字符输入流,需通过构造方法传入Reader类型的对象(此处为InputStreamReader,用于将字节流转换为字符流)。创建BufferedReader实例需显式指定类名,因此填写BufferedReader

2. 第二处空白:isValid方法的参数

答案:str

//*********Found**********
if(isValid(str))      //验证输入是否有空格

解析
isValid方法的定义为public static boolean isValid(String s),需传入字符串参数。程序中str存储了用户输入的内容(待验证的“用户和密码信息”),因此需将str作为参数传入,填写str

3. 第三处空白:读取文件名的输入流对象

答案:in

//*********Found**********
str=in.readLine();

解析
in是前面创建的BufferedReader对象,用于从键盘读取输入。此处需要读取用户输入的文件名,仍使用同一个输入流对象inreadLine()方法,因此填写in

4. 第四处空白:FileWriter的构造参数

答案:savedfile

//*********Found**********
BufferedWriter out = new BufferedWriter(new FileWriter(savedfile));

解析
FileWriter用于写入字符文件,其构造方法可接收File对象作为参数。前面已通过new File(curDir+"\\"+str)创建了savedfile(目标文件对象),因此此处需传入savedfile,填写该变量名。

5. 第五处空白:写入换行符

答案:"\n"

//*********Found**********
out.write("\n");      //换行

解析
BufferedWriterwrite(String s)方法可写入字符串,此处需要在每个用户信息后换行,"\n"是换行符的转义字符串,因此填写"\n"

6. 第六处空白:异常捕获关键字

答案:catch

//*********Found**********
catch(Exception e){

解析
try块后的代码用于捕获异常,Java中异常捕获需使用catch关键字,后跟异常类型和参数。此处需捕获Exception类型的异常,因此填写catch

三、完整正确代码

四、程序功能与运行说明

程序功能

该程序实现从键盘录入用户信息(要求包含空格分隔的“用户和密码”),验证输入格式后保存到指定文件,核心功能包括:

  1. 键盘输入:通过BufferedReader接收用户输入的信息和文件名
  2. 输入验证:通过isValid方法检查输入是否包含空格(确保格式为“用户 密码”)
  3. 循环控制:输入“quit”或“QUIT”时终止录入
  4. 文件保存:将所有有效信息写入用户指定的文件(存储在当前工作目录)
  5. 异常处理:捕获并提示可能的IO异常(如文件无法写入)
运行说明
  1. 录入流程:

    • 程序启动后提示:请输入用户和密码信息,中间用空格隔开,输入quit退出:
    • 输入包含空格的字符串(如alice 123456):验证通过,存入Vector
    • 输入不包含空格的字符串(如bob):提示The string is NOT valid!,不存入
    • 输入quitQUIT:退出录入循环
  2. 保存流程:

    • 提示请输入保存到的文件名:,输入文件名(如userdata.txt
    • 程序在当前工作目录创建该文件,将Vector中存储的有效信息逐行写入
  3. 示例输出:

    请输入用户和密码信息,中间用空格隔开,输入quit退出:
    tom abc123
    jerry 456def
    mike
    The string is NOT valid!
    quit
    请输入保存到的文件名:
    accounts.txt

    最终accounts.txt内容为:

    tom abc123
    jerry 456def

五、核心知识点总结

  1. 缓冲流的创建与使用

    • BufferedReader:用于高效读取文本,通过new BufferedReader(Reader in)创建,此处传入InputStreamReader(System.in)(将标准输入流转换为字符流)
    • BufferedWriter:用于高效写入文本,通过new BufferedWriter(Writer out)创建,此处传入FileWriter(savedfile)(关联目标文件)
    • 优势:带缓冲区的流减少IO操作次数,提升读写效率
  2. 输入验证逻辑

    • isValid方法:通过String.indexOf(" ") > 0判断字符串是否包含空格(包含则返回true
    • 过滤规则:仅保留符合“用户 密码”格式的输入,排除无效输入(除退出命令外)
  3. 文件路径与File对象

    • 当前工作目录:System.getProperty("user.dir")获取程序运行的目录(如D:\project
    • 文件路径拼接:curDir + "\\" + str构建完整路径(如D:\project\accounts.txt
    • File对象:封装文件路径信息,作为FileWriter的参数指定写入目标
  4. 异常处理机制

    • try-catch块:try中包含可能抛出异常的IO操作(如readLine()write()),catch捕获Exception类型异常并输出错误信息
    • 必要性:IO操作可能因文件权限、路径不存在等原因失败,异常处理确保程序不崩溃并提示错误
  5. Vector的应用

    • 作用:动态存储有效输入的信息(长度可变,适合不确定录入数量的场景)
    • 操作:v.add(str)添加元素,v.elementAt(i)获取指定索引元素,v.size()获取元素数量

六、常见错误与应试技巧

  1. 常见错误分析

    • 第一处空白流创建错误:写成BufferReader(拼写错误)或FileReader(无法关联标准输入流)
    • 第二处空白方法参数错误:写成"str"(传入字符串字面量,非变量)或x(未定义的变量)
    • 第三处空白读取对象错误:写成out(输出流无法读取输入)或new BufferedReader(...)(重复创建流,浪费资源)
    • 第四处空白文件参数错误:写成str(仅文件名,未拼接路径)或curDir(目录而非文件)
    • 第五处空白换行符错误:写成\n(缺少引号,语法错误)或"\t"(制表符而非换行)
    • 第六处空白异常关键字错误:写成catche(拼写错误)或throw(抛出异常而非捕获)
  2. 应试技巧

    • 缓冲流创建:“缓冲流要包装,Reader/Writer做参数,BufferedReader读输入,BufferedWriter写输出”
    • 输入验证:“方法参数看定义,isValid要String,用户输入存str,直接传参准没错”
    • 文件操作:“File对象封装路,FileWriter关联它,读写要用同一流,资源不浪费”
    • 异常处理:“IO操作有风险,try-catch来护航,catch关键字别写错,异常信息要输出”

通过本题,我们掌握了Java IO流(缓冲流)的创建与使用、输入验证逻辑、文件路径处理、动态数组(Vector)应用及异常处理的综合技能。这类题型是“数据录入→验证→持久化”经典流程的体现,对理解实际应用中数据处理的完整链路具有重要意义。

喜欢就支持一下吧
点赞 0 分享 收藏
评论 抢沙发
OωO
取消 登录评论