任务要求
程序代码
FileOperation类:
package 信析任务;
import java.io.*;
public class FileOperation {
//建立File文件
File file = new File("src/user.db.txt");;
//建立写入文件的方法
public boolean writeMsg(String msg) throws IOException{
//运用字符缓冲流
BufferedWriter bw = new BufferedWriter(new FileWriter(file,true)) ;
//加上\n是为了每次打入的字符串换行
bw.write(msg);
//释放资源
bw.close();
//返回一个true以确定方法运行的结果
return true;
}
//建立读取文件的方法
public void readMsg()throws IOException{
//运用字符流读取数据
Reader reader = new FileReader(file);
//建立字符串函数path来存放file的绝对路径
String path = file.getAbsolutePath();
//创建一个char数组来存放输入的字符串
char[] chs = new char[100];
//读取文件到chs数组中
int info = reader.read(chs);
System.out.println("文件的地址为:" + path);
System.out.println("文件的内容为:");
//输出chs内的字符串
System.out.println(chs);
//释放资源
reader.close();
}
//建立删除文件的方法
public boolean deletefile() throws IOException{
//返回一个true则说明文件删除成功,返回一个false则说明文件删除失败
return file.delete();
}
}
Test类:
package 信析任务;
import java.io.IOException;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws IOException {
//Scanner类的声明
Scanner sc = new Scanner(System.in);
//构造FileOperation类
FileOperation file = new FileOperation();
//死循环是为了程序可重新运行
for ( ; ; ) {
//程序的说明
System.out.println("请输入你需要的功能:");
System.out.println("0:结束当前程序");
System.out.println("1:打印字符串到指定的文件中");
System.out.println("2:打印指定文件的地址以及其中含有的字符串");
System.out.println("3:删除指定文件");
//这里的if是为了防止打错成非整数的情况,若输入了其他类型的数则会结束程序
if (sc.hasNextInt()) {
int choose = sc.nextInt();
//运用switch函数来运行不同的类
switch (choose) {
//运行结束
case 0: {
System.exit(0);
}
//运行写入类
case 1: {
//建立字符串函数msg,赋给他空的值以便下面的运算
String msg = "";
System.out.println("请输入你想打印的字符串");
//运用do..while()来使程序运行到"end"字符串后结束
do {
msg += sc.nextLine();
msg += "\n";
} while (!(msg.endsWith("end\n")));
//len-3是为了使减去输入末尾的“end”
int len = msg.length();
msg = msg.substring(0,len-4);
//运行FileOperation类的写入方法
if(file.writeMsg(msg)){
System.out.println("信息写入成功,目前文件包含如下内容:");
file.readMsg();
}else{
System.out.println("文件写入失败");
}
break;
}
//运行读取类
case 2: {
file.readMsg();
break;
}
//运行删除类
case 3:{
if(file.deletefile()) {
System.out.println("文件删除成功");
}else {
System.out.println("文件删除失败");
}
break;
}
}
}else break;
}
}
}
运行结果:
请输入你需要的功能:
0:结束当前程序
1:打印字符串到指定的文件中
2:打印指定文件的地址以及其中含有的字符串
3:删除指定文件
1
请输入你想打印的字符串
我是PAGend
信息写入成功,目前文件包含如下内容:
文件的地址为:C:\Users\PAG\IdeaProjects\1\src\user.db.txt
文件的内容为:
我是PAG
请输入你需要的功能:
0:结束当前程序
1:打印字符串到指定的文件中
2:打印指定文件的地址以及其中含有的字符串
3:删除指定文件
2
文件的地址为:C:\Users\PAG\IdeaProjects\1\src\user.db.txt
文件的内容为:
我是PAG
请输入你需要的功能:
0:结束当前程序
1:打印字符串到指定的文件中
2:打印指定文件的地址以及其中含有的字符串
3:删除指定文件
3
文件删除成功
请输入你需要的功能:
0:结束当前程序
1:打印字符串到指定的文件中
2:打印指定文件的地址以及其中含有的字符串
3:删除指定文件
0
Process finished with exit code 0
遇到的问题
因为我是把Java基本学完了再去完成任务的,所以这次任务并没有给我太多困难,我用了差不多一下午就完成了,但在完成程序的过程中还是遇到了几个棘手的问题,就在这里整理总结一下,以提升自己的编程水平,防止下次问题的出现。
FileOperation类遇到的问题
因为我已经学到IO流了,所以基本的方法编写是没什么问题的,但在writeMsg(String msg) 和readMsg() 方法上还是遇到了麻烦。
-
在建立字符流输入数据时,我选择了Write write = new write(); 这导致了有段时间我没法正常的输入数据,而且程序也在报错,说明我对IO流的输入这块还不够熟练
-
在readMsg() 方法中,我在想如何把文档中的字符串输出到控制台上时,选择新建一个char[ ] chs函数来装字符串,但在输出时我犯了个错误,导致了程序的报错,就是把文字说明和chs一起输出,这导致了程序的报错,在我发现错误后,把他们分成两句后程序就正常了。
Test类遇到的问题
Tset类是我一步步想到的,但其中最费脑细胞的问题就是引用writeMsg(String msg) 那条语句,我主要在困惑如何实现任务中说的“在输入end后结束输入”,不过后来我在试了很多条程序后终于想到了do…while(),于是任务的问题就解决了。
但这时又有新问题出现了——输入的字要换行的话要怎么操作呢,我又试了很多方法,最终还是没有想到,于是我决定去咨询学长,学长看完我的程序后很快指出了问题,在又几次的尝试后,我终于解决了自己的问题,Test类也成功编写完成。
我的感受
经过这次信析团队的任务,我发现自己的编程水平还需要提高,在编程的速度以及完成度上还有很大的提升空间。这次任务给让我看到了自己过去学习Java知识的一些漏洞,提醒了我要经常回去复习才能继续提高。