Java 文件读写与删除实战解析:File流操作与命令行参数
一、原题完整代码呈现
以下是计算机二级Java考试中关于文件IO操作的典型题型,主要考察命令行参数使用、文件流创建、内容读写及文件删除,包含4处需要填写的空白(标记为//*********Found**********
):
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Java_2
{
public static void main(String args[])
{
if(args.length<2)
{
System.out.println("ERROR: need parameters.");
System.out.println("\n -usage: java <classname> <file1> <file2>");
System.exit(0);
}
File f1=new File(args[0]);
//*********Found**********
File f2=new File(_____________________);
try
{
//*********Found**********
FileReader fr=new FileReader(______________________);
FileWriter fw=new FileWriter(f1,true);
int b;
//*********Found**********
while(( b=fr.read() ) != -1 ) fw.write(_____________________);
fr.close();
fw.close();
}
catch(IOException e)
{
e.printStackTrace();
}
System.out.println("has done!");
//*********Found**********
if(f2.delete()) System.out.print("___________");
}
}
二、空白处逐一解析与解答
1. 第一处空白:创建第二个文件对象
答案:args[1]
//*********Found**********
File f2=new File(args[1]);
解析:
程序通过命令行参数接收两个文件名(args[0]
和args[1]
)。f1
已关联args[0]
(目标文件),f2
需关联args[1]
(源文件,后续会读取其内容并删除)。File
类通过构造方法接收文件路径字符串,因此填写args[1]
。
2. 第二处空白:创建源文件的读取流
答案:f2
//*********Found**********
FileReader fr=new FileReader(f2);
解析: FileReader
用于读取文件内容,需关联源文件(f2
)。程序逻辑是将f2
的内容写入f1
,因此读取流fr
需以f2
为参数创建,填写f2
。
3. 第三处空白:写入读取到的字节
答案:b
//*********Found**********
while(( b=fr.read() ) != -1 ) fw.write(b);
解析: fr.read()
返回读取到的字节(int
类型,范围0-255,-1表示读取结束),存储在变量b
中。fw.write(int c)
方法将字节b
写入目标文件f1
,因此填写b
。
4. 第四处空白:删除成功的提示信息
答案:file2 deleted
//*********Found**********
if(f2.delete()) System.out.print("file2 deleted");
解析: f2.delete()
返回boolean
值(true
表示删除成功)。若删除成功,需输出提示信息,结合程序逻辑(删除f2
),合理提示为“file2 deleted”,因此填写该字符串。
三、完整正确代码
四、程序功能与运行说明
程序功能
该程序实现文件内容的追加与源文件删除,核心功能包括:
- 检查命令行参数(需提供2个文件名),参数不足则提示用法并退出
- 关联两个文件:
f1
为目标文件(接收内容),f2
为源文件(提供内容) - 读取
f2
的内容,追加到f1
(FileWriter(f1,true)
中的true
表示追加模式) - 操作完成后删除
f2
,并在删除成功时输出提示
运行说明
- 运行准备:
需在命令行中提供两个文件名(如file1.txt
和file2.txt
),其中file2.txt
需预先存在并包含内容。 执行命令:
java Java_2 file1.txt file2.txt
执行流程:
- 检查参数:若参数不足,输出
ERROR: need parameters.
及用法提示 - 读写内容:将
file2.txt
的所有内容追加到file1.txt
末尾 - 清理操作:删除
file2.txt
,若成功则输出file2 deleted
- 最终提示:无论删除是否成功,均输出
has done!
- 检查参数:若参数不足,输出
示例结果:
若file2.txt
存在且操作成功,输出:has done! file2 deleted
五、核心知识点总结
命令行参数的使用
main
方法的String[] args
参数用于接收命令行输入的参数,索引从0开始- 程序先检查
args.length<2
:确保提供足够参数(目标文件和源文件),否则提示用法(-usage: java <classname> <file1> <file2>
) - 参数作用:
args[0]
是内容接收文件,args[1]
是内容提供文件(后续被删除)
文件流的创建与操作
File
类:用于表示文件或目录的路径,不直接操作文件内容,仅作为流的操作对象FileReader
:字符输入流,用于读取文本文件内容,read()
方法返回单个字符(int
类型),-1表示读取结束FileWriter
:字符输出流,用于写入文本文件内容:- 构造方法
FileWriter(File file, boolean append)
中,append
为true
时表示追加内容(不覆盖原有内容) - 需调用
close()
方法关闭流,释放资源(也可使用try-with-resources自动关闭)
- 构造方法
文件内容读写逻辑
- 循环读取:
while((b=fr.read()) != -1)
循环读取f2
的每个字符,直到文件末尾(-1
) - 写入内容:
fw.write(b)
将读取到的字符b
写入f1
,实现内容复制 - 注意:此逻辑适用于文本文件,二进制文件需使用
FileInputStream
和FileOutputStream
- 循环读取:
文件删除操作
File.delete()
方法:删除文件或空目录,返回boolean
值(true
表示成功,false
表示失败,如文件不存在、被占用等)- 本题中删除
f2
的目的:完成内容迁移后清理源文件,避免冗余
六、常见错误与应试技巧
常见错误分析
- 第一处空白参数索引错误:写成
args[0]
(f1
和f2
指向同一文件,导致读写冲突)或args[2]
(参数越界,数组索引错误) - 第二处空白流关联错误:写成
f1
(读取目标文件,逻辑颠倒)或args[1]
(直接使用路径字符串,虽语法正确但不符合面向对象思想) - 第三处空白写入参数错误:写成
fr.read()
(重复读取,导致字符丢失)或"b"
(写入字符串"b",而非读取的字节) - 第四处空白提示信息错误:写成
f2.getName()
(仅输出文件名,无操作结果提示)或拼写错误(如file2 delete
缺少过去分词)
- 第一处空白参数索引错误:写成
应试技巧
- 参数处理口诀:"命令行参数要检查,长度不够提示它,args[0]、args[1]分清楚,源文件和目标别搞差"
- 流操作口诀:"读用Reader写用Writer,关联文件要正确,循环读取到-1,逐个写入不丢失"
- 文件删除:"delete()方法返布尔,成功失败能看出,提示信息要明确,操作结果心有数"
- 调试技巧:添加文件存在性检查(
f2.exists()
),避免因源文件不存在导致的FileNotFoundException
通过本题,我们掌握了命令行参数的处理、文件字符流的读写操作及文件删除的基本逻辑。文件IO是Java编程的基础技能,理解流的创建与资源释放对处理文本文件交互具有重要意义。