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

Java IO流与输入验证实战解析:控制台输入与文件保存

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

Java IO流与输入验证实战解析:控制台输入与文件保存

87.png

一、原题完整代码呈现

以下是计算机二级Java考试中关于IO流操作、控制台输入及数据验证的典型题型,主要考察包导入、输入流创建、循环退出条件及文件写入,包含4处需要填写的空白(标记为//*********Found**********):

//*********Found**********
import java.__________________.*;
import java.util.Vector;

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

         String curDir = System.getProperty("user.dir");
         File savedfile=new File(curDir+"\\"+   str   );
            
         BufferedWriter out = new BufferedWriter(new FileWriter(savedfile));
         for(int i=0; i<v.size(); i++)
         {
            String tmp=(String)v.elementAt(i);
         //*********Found**********
            out.write(__________________);
            out.write("\n");
         }
         out.close();
        
      }
      catch (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. 第一处空白:导入IO相关类的包

答案:io

//*********Found**********
import java.io.*;

解析
代码中使用了BufferedReaderInputStreamReaderBufferedWriterFileWriterFile等类,这些均属于java.io包(输入输出相关的核心类库)。通过import java.io.*;可导入该包下的所有类,因此填写io

2. 第二处空白:创建标准输入流

答案:System.in

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

解析
BufferedReader用于高效读取文本,其构造方法需要Reader类型的参数。InputStreamReader是字节流到字符流的桥梁,需传入字节输入流。System.in是标准输入流(对应键盘输入),因此填写System.in,实现从键盘读取输入的功能。

3. 第三处空白:循环退出的条件字符串

答案:quit

//*********Found**********
while (!(str.equals("quit")||str.equals("QUIT")))

解析
循环的目的是持续接收用户输入,直到输入“quit”或“QUIT”时退出。条件表达式!(str.equals("quit")||str.equals("QUIT"))表示:当输入不是“quit”且不是“QUIT”时继续循环。因此空白处填写quit,与后续的“QUIT”形成大小写兼容的退出条件。

4. 第四处空白:写入文件的内容

答案:tmp

//*********Found**********
out.write(tmp);

解析
循环遍历Vector v中的元素(tmp是当前遍历到的字符串,存储着用户输入的有效信息),BufferedWriterwrite(String s)方法用于将字符串写入文件。此处需将tmp的内容写入,因此填写tmp

三、完整正确代码

四、程序功能与运行说明

程序功能

该程序实现从控制台接收用户输入、验证输入格式并保存到文件的完整流程,核心功能包括:

  1. 输入接收:通过控制台接收用户输入的“用户和密码信息”(要求中间用空格分隔)
  2. 输入验证:通过isValid方法检查输入是否包含空格(包含则有效,否则提示无效)
  3. 循环控制:输入“quit”或“QUIT”时退出输入循环
  4. 文件保存:将所有有效输入保存到用户指定的文件中(存储在当前工作目录)
运行说明
  1. 程序启动后,显示提示信息:

    请输入用户和密码信息,中间用空格隔开,输入quit退出:
  2. 输入流程:

    • 输入包含空格的字符串(如user1 123456):验证通过,存入Vector
    • 输入不包含空格的字符串(如user2):提示The string is NOT valid!,不存入
    • 输入quitQUIT:退出输入循环
  3. 保存流程:

    • 程序提示:请输入保存到的文件名:
    • 输入文件名(如userinfo.txt):程序将Vector中存储的有效信息写入该文件(位于当前工作目录)
  4. 示例输出:

    请输入用户和密码信息,中间用空格隔开,输入quit退出:
    admin root123
    user001 pass001
    test
    The string is NOT valid!
    quit
    请输入保存到的文件名:
    info.txt

    最终info.txt文件内容为:

    admin root123
    user001 pass001

五、核心知识点总结

  1. IO包的导入与核心类

    • 包导入:java.io.*包含所有输入输出相关类,必须导入才能使用BufferedReaderFile
    • 核心流类:

      • BufferedReader:带缓冲区的字符输入流,readLine()方法可读取一行文本
      • InputStreamReader:字节流转字符流的适配器,将System.in(字节流)转换为字符流
      • BufferedWriter:带缓冲区的字符输出流,write(String)方法写入字符串,close()关闭流释放资源
      • File:表示文件或路径,用于指定写入的目标文件
  2. 标准输入流(System.in)的使用

    • System.in是Java默认的标准输入流(对应键盘输入),类型为InputStream(字节流)
    • 结合InputStreamReaderBufferedReader使用,实现高效的文本输入:
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in))
    • readLine()方法:读取用户输入的一行文本(直到回车),返回String类型
  3. 循环控制与退出条件

    • 循环目的:持续接收输入直到用户主动退出(输入“quit”或“QUIT”)
    • 条件表达式:!(str.equals("quit")||str.equals("QUIT"))确保大小写不敏感的退出判断
    • 注意:需先读取输入(str = in.readLine())再判断有效性,避免初始空字符串触发退出
  4. 输入验证逻辑

    • isValid方法:通过str.indexOf(" ")>0判断字符串是否包含空格(包含则返回true
    • 过滤无效输入:除了“quit”/“QUIT”外,不包含空格的输入会被提示无效并拒绝存储
  5. 文件写入与路径处理

    • 当前工作目录:System.getProperty("user.dir")获取程序运行的当前目录
    • 文件路径拼接:curDir+"\\"+str构建完整文件路径(如D:\work\info.txt
    • 写入逻辑:遍历Vector中的有效输入,通过BufferedWriter逐行写入文件(out.write(tmp)+换行符\n

六、常见错误与应试技巧

  1. 常见错误分析

    • 第一处空白包名错误:写成utiljava.util不包含IO类)或拼写错误(如jo),导致BufferedReader等类无法识别
    • 第二处空白输入流错误:写成System.out(输出流,无法读取输入)或new FileInputStream("")(文件输入流,而非控制台)
    • 第三处空白退出字符串错误:写成exit(与提示信息中的“quit”不符)或大小写错误(如Quit,导致无法匹配)
    • 第四处空白写入内容错误:写成vVector对象无法直接写入,需取元素)或str(最后输入的文件名,非存储的有效信息)
  2. 应试技巧

    • IO包导入:“读写文件靠IO,import java.io.*不能漏,流类都在里面藏,没有导入用不了”
    • 控制台输入:“键盘输入用System.in,包装成Reader再缓冲,BufferedReader效率高,readLine()读一行”
    • 循环退出:“退出条件要记清,quit/QUIT都可行,逻辑非运算来控制,直到输入才停”
    • 文件写入:“遍历集合取元素,tmp变量来承接,write方法写内容,换行符号不能缺”

通过本题,我们掌握了Java IO流的基本使用(控制台输入与文件输出)、循环控制逻辑、输入验证及路径处理的综合应用。IO操作是Java与外部数据交互的基础,理解流的包装关系和使用规范对开发数据处理程序具有重要意义。

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