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

一、原题完整代码呈现
以下是计算机二级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.*;解析:
代码中使用了BufferedReader、InputStreamReader、BufferedWriter、FileWriter、File等类,这些均属于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是当前遍历到的字符串,存储着用户输入的有效信息),BufferedWriter的write(String s)方法用于将字符串写入文件。此处需将tmp的内容写入,因此填写tmp。
三、完整正确代码
四、程序功能与运行说明
程序功能
该程序实现从控制台接收用户输入、验证输入格式并保存到文件的完整流程,核心功能包括:
- 输入接收:通过控制台接收用户输入的“用户和密码信息”(要求中间用空格分隔)
- 输入验证:通过
isValid方法检查输入是否包含空格(包含则有效,否则提示无效) - 循环控制:输入“quit”或“QUIT”时退出输入循环
- 文件保存:将所有有效输入保存到用户指定的文件中(存储在当前工作目录)
运行说明
程序启动后,显示提示信息:
请输入用户和密码信息,中间用空格隔开,输入quit退出:输入流程:
- 输入包含空格的字符串(如
user1 123456):验证通过,存入Vector - 输入不包含空格的字符串(如
user2):提示The string is NOT valid!,不存入 - 输入
quit或QUIT:退出输入循环
- 输入包含空格的字符串(如
保存流程:
- 程序提示:
请输入保存到的文件名: - 输入文件名(如
userinfo.txt):程序将Vector中存储的有效信息写入该文件(位于当前工作目录)
- 程序提示:
示例输出:
请输入用户和密码信息,中间用空格隔开,输入quit退出: admin root123 user001 pass001 test The string is NOT valid! quit 请输入保存到的文件名: info.txt最终
info.txt文件内容为:admin root123 user001 pass001
五、核心知识点总结
IO包的导入与核心类
- 包导入:
java.io.*包含所有输入输出相关类,必须导入才能使用BufferedReader、File等 核心流类:
BufferedReader:带缓冲区的字符输入流,readLine()方法可读取一行文本InputStreamReader:字节流转字符流的适配器,将System.in(字节流)转换为字符流BufferedWriter:带缓冲区的字符输出流,write(String)方法写入字符串,close()关闭流释放资源File:表示文件或路径,用于指定写入的目标文件
- 包导入:
标准输入流(System.in)的使用
System.in是Java默认的标准输入流(对应键盘输入),类型为InputStream(字节流)- 结合
InputStreamReader和BufferedReader使用,实现高效的文本输入:BufferedReader in = new BufferedReader(new InputStreamReader(System.in)) readLine()方法:读取用户输入的一行文本(直到回车),返回String类型
循环控制与退出条件
- 循环目的:持续接收输入直到用户主动退出(输入“quit”或“QUIT”)
- 条件表达式:
!(str.equals("quit")||str.equals("QUIT"))确保大小写不敏感的退出判断 - 注意:需先读取输入(
str = in.readLine())再判断有效性,避免初始空字符串触发退出
输入验证逻辑
isValid方法:通过str.indexOf(" ")>0判断字符串是否包含空格(包含则返回true)- 过滤无效输入:除了“quit”/“QUIT”外,不包含空格的输入会被提示无效并拒绝存储
文件写入与路径处理
- 当前工作目录:
System.getProperty("user.dir")获取程序运行的当前目录 - 文件路径拼接:
curDir+"\\"+str构建完整文件路径(如D:\work\info.txt) - 写入逻辑:遍历
Vector中的有效输入,通过BufferedWriter逐行写入文件(out.write(tmp)+换行符\n)
- 当前工作目录:
六、常见错误与应试技巧
常见错误分析
- 第一处空白包名错误:写成
util(java.util不包含IO类)或拼写错误(如jo),导致BufferedReader等类无法识别 - 第二处空白输入流错误:写成
System.out(输出流,无法读取输入)或new FileInputStream("")(文件输入流,而非控制台) - 第三处空白退出字符串错误:写成
exit(与提示信息中的“quit”不符)或大小写错误(如Quit,导致无法匹配) - 第四处空白写入内容错误:写成
v(Vector对象无法直接写入,需取元素)或str(最后输入的文件名,非存储的有效信息)
- 第一处空白包名错误:写成
应试技巧
- IO包导入:“读写文件靠IO,import java.io.*不能漏,流类都在里面藏,没有导入用不了”
- 控制台输入:“键盘输入用System.in,包装成Reader再缓冲,BufferedReader效率高,readLine()读一行”
- 循环退出:“退出条件要记清,quit/QUIT都可行,逻辑非运算来控制,直到输入才停”
- 文件写入:“遍历集合取元素,tmp变量来承接,write方法写内容,换行符号不能缺”
通过本题,我们掌握了Java IO流的基本使用(控制台输入与文件输出)、循环控制逻辑、输入验证及路径处理的综合应用。IO操作是Java与外部数据交互的基础,理解流的包装关系和使用规范对开发数据处理程序具有重要意义。