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与外部数据交互的基础,理解流的包装关系和使用规范对开发数据处理程序具有重要意义。