要求
要求在程序中,用户输入指令1代表“新建文件”,此时可以从控制台获取用户输入的文件内容;
指令2代表“打开文件”,此时可将指定路径的txt文件的内容展现到控制台;
指令3代表“修改文件”,此时既可以修改新建文件的内容,也可以修改打开文件的内容;
指令4代表“保存”,此时如果是新建的文件需要保存,则将文件保存到用户输入的路径,如果是打开的文件需要保存,则将原来内容覆盖;
指令5代表“退出”,即退出本系统。
效果
思路
(1)根据任务介绍和运行结果分析可知,此任务需要创建一个记事本类,在类中可以使用while循环实现控制台中操作指令的多次输入,使用switch语句根据控制台输入的操作指令来判断执行什么操作。
(2)输入指令1时进行新建文件操作,此时需要从控制台获取输入的内容并暂存到全局变量中,以便后期进行保存和修改内容时使用。可以使用StringBuffer来保存控制台中每次输入的内容,输入内容时可能会涉及换行,这里可以使用while循环来循环输入,每循环一次都将控制台获取的内容拼接换行符后,追加到文本内容中。当内容中输入“stop”字符串时,输入文本内容的操作结束,并将新建文本的内容暂存在全局变量中。
(3)执行指令2时,可以打开指定路径的文件,由于是模拟记事本程序,因此限定此功能只支持打开txt文件。此操作首先要获取输入的路径,判断此路径的文件是否是txt文件,如果是则通过字符流读取此文件,然后将此文件的内容打印至控制台,并且暂存在全局变量中,将文件的路径也保存至全局变量中。
(4)执行指令3时,可以对暂存在全局变量中的文本内容进行修改,修改后的内容也需要暂存到全局变量中。此操作首先要判断一下修改之前是否先经过过新建文件或者打开文件操作,当确认经过上述操作后,可以将输入的字符串与文本内容中目标字符串进行替换(String的replace方法),来完成修改内容功能。修改过程可通过while循环来进行多次的修改,当捕捉到“stop”字符串时修改结束,并将修改后的内容暂存到全局变量中。
(5)执行指令4时,将所有全局变量中的内容保存至本地,如果是新建的文件则保存至用户输入的路径,如果是打开后的文件则将原文件覆盖。可以通过文件路径的全局变量判断是哪种保存方式,当是打开文件的方式时,直接通过字符流写入;当是新建的方式时,先获取用户输入的路径,再用字符流写入。
(6)执行指令5,直接退出系统,可以通过代码“System.exit(0);”实现。
源码
package notebook;
import java.io.FileFilter;
import java.io.IOException;
public class NoteBook {
public static void main(String[] args) throws IOException {
NoteUilte noteUilte = new NoteUilte();
while (noteUilte.num != 5) {
noteUilte.scan();
}
}
}
package notebook;
import java.io.*;
import java.util.Scanner;
public class NoteUilte {
NoteUilte() {
}
static int num;
File file;
String writeStr;
public void scan() throws IOException {
Scanner scanner = new Scanner(System.in);
System.out.println("输入1 新建文件,输入2打开文件,输入3修改文件,输入4保存文件,输入5退出");
int num = scanner.nextInt();
scanner.nextLine();//消费换行符
switch (num) {
case 1: {
System.out.println("请问您要将文件保存在哪个路径");
String filePath = scanner.nextLine();//这一行没有让我输入,但是在调式的时候却有执行并让我输入,我输入了E:\桌面\,但我看了filePath变量却显示""空的
File file = new File(filePath);
if (!file.exists()) {
System.out.println("您输入的文件不存在,将为您新建");
file.createNewFile();
System.out.println("文件已新建");
} else {
System.out.println("您输入的文件已存在,输入2打开");
}
break;
}
case 2: {
System.out.println("请问您要打开哪个路径的文件?");
String filePath = scanner.nextLine();
FileReader fileReader1 = new FileReader(filePath);
BufferedReader fileReader = new BufferedReader(fileReader1);
// if(fileReader.readLine() == null){
//
// System.out.println("该文件是空的!");
//
// }else{
//
// }
String b;
while ((b = fileReader.readLine()) != null) {
System.out.println("该文件的内容是:" + b);
}
System.out.println("文件已读取完毕");
fileReader.close();
break;
}
case 3: {
System.out.println("请问您要修改哪个路径的文件?");
String filePath = scanner.nextLine();
File file = new File(filePath);
if (!file.exists()) {
file.createNewFile();
} else {
System.out.println("该文件存在,请输入您要”修改的字符:修改后的字符“冒号是英文的");
String edit = scanner.nextLine();
// for (String s : edit.split(":")) {//第一串s是用户要修改的字符串,第二个s是用户要替换的字符串
//
// FileWriter fileWriter = new FileWriter(file);
// fileWriter.write();//指令3代表“修改文件”,此时既可以修改新建文件的内容,也可以修改打开文件的内容
String[] edits = edit.split(":");
String older = edits[0];
String newer = edits[1];
String writeStr = older.replace(older, newer);
System.out.println("已修改,保存请输入4");
GetFileEdit(file, writeStr);//获取被修改的文件路径
}
break;
}
case 4: {
FileWriter fileWriterEdit = new FileWriter(file);
// fileWriterEdit.flush();
fileWriterEdit.write(writeStr);
fileWriterEdit.flush();//写入后刷新
System.out.println("您的文件已保存");
break;
}
case 5: {
stop(5);
System.out.println("程序已结束,感谢您的使用!");
System.exit(0);
break;
}
default: {
System.out.println("您的输入有误哦!");
}
}
}
public void GetFileEdit(File file, String writeStr) {
this.file = file;
this.writeStr = writeStr;
}
public void stop(int num) {
this.num = num;
}
}