来源:Java基础案例教程
1、任务描述
模拟记事本,通过在控制台输入指令,实现在本地新建文件、打开文件和修改文件
功能:
1:新建文件
2:打开文件
3:修改文件
4:保存文件
5:退出
2、运行结果
备注:只是简单运行了一下,可能存在bug和代码不合理的地方,请多多包含
实现代码
(1)创建记事本类,在类中编写执行程序的main方法
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
/**
* 创建记事本类,在类中编写执行程序的main方法
*/
public class Notepad {
private static String filePath; // 保存文件的路径
private static String message = ""; // 保存文件内容
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("--1:新建文件 2:打开文件 3:修改文件 4:保存 5:退出--");
while (true) {
System.out.println("请输入操作指令:");
int command = sc.nextInt();
switch (command) {
case 1:
createFile(); // 新建文件
break;
case 2:
openFile(); // 打开文件
break;
case 3:
editFile(); // 修改文件
break;
case 4:
saveFile(); // 保存文件
break;
case 5:
exit(); // 退出
break;
default:
System.out.println("您输入的指令错误!");
break;
}
}
}
(2)在Notepad中编写新建文件的方法
/**
* 新建文件,从控制台获取内容
*/
private static void createFile() {
message = ""; // 新建文件时,暂存文件内容清空
Scanner sc = new Scanner(System.in);
System.out.println("请输入内容,停止编写请输入\"stop\":");
StringBuffer stb = new StringBuffer(); // 用于后期输入内容的拼接
String inputMessage = ""; // 接收输入的内容
while (!inputMessage.equals("stop")) { // 输入stop时停止输入
if (stb.length() > 0) {
stb.append("\r\n"); // 追加换行符
}
stb.append(inputMessage); // 拼接输入的信息
inputMessage = sc.nextLine(); // 获取输入信息
}
message = stb.toString(); // 将输入的内容暂存
}
(3)在Notepad中编写打开文件的方法
/**
* 打开文件
*/
private static void openFile() {
message = ""; // 新建文件时,暂存文件内容清空
Scanner sc = new Scanner(System.in);
System.out.println("请输入打开文件的位置:");
filePath = sc.next(); // 获取打开文件的路径
// 控制只能输入txt格式的文件路径
if (filePath != null && !filePath.endsWith(".txt")) {
System.out.println("请选择文本文件!");
return;
}
FileReader in = null;
try {
in = new FileReader(filePath);
char[] charArr = new char[1024];
int len = 0;
StringBuffer sb = new StringBuffer();
while ((len = in.read(charArr)) != -1) {
sb.append(charArr);
}
message = sb.toString(); // 将打开文件内容暂存
} catch (IOException e) {
e.printStackTrace();
} finally {
System.out.println("文件内容是:" + "\r\n" + message);
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
(4)在Notepad中编写修改文件的方法
/**
* 修改文件内容,通过字符串替换的形式
*/
private static void editFile() {
if (message == "" && filePath == null) {
System.out.println("请先新建文件或打开文件");
return;
}
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改的内容(以\"修改的目标文字:修改之后的文字\"格式)," + "停止修改请输入\"stop\":");
String inputMessage = "";
while (!inputMessage.equals("stop")) {
inputMessage = sc.nextLine();
if (inputMessage != null && inputMessage.length() > 0) {
// 将输入的文字根据 “:”进行拆分
String[] editMessage = inputMessage.split(":");
if (editMessage != null && editMessage.length > 0) {
// 根据输入的信息将文件中内容替换
message = message.replace(editMessage[0], editMessage[1]);
}
}
}
System.out.println("修改后的内容:" + "\r\n" + message);
}
(5)在Notepad中编写保存文件的方法
/**
* 保存,新建文件存在用户输入的路径,打开的文件将原文件覆盖
*/
private static void saveFile() {
Scanner sc = new Scanner(System.in);
FileWriter out = null;
// 文件是有打开载入的,将原文件覆盖
if (filePath != null) {
try {
out = new FileWriter(filePath);
} catch (IOException e) {
e.printStackTrace();
}
} else { // 新建的文件
System.out.println("请输入文件保存的绝对路径:");
String path = sc.next(); // 获取路径
filePath = path;
// 将输入路径中的大写字母替换为小写字母后判断是不是文本格式
if (!filePath.toLowerCase().endsWith(".txt")) {
filePath += ".txt";
}
try {
out = new FileWriter(filePath);
} catch (IOException e) {
e.printStackTrace();
}
}
// 写入暂存的内容
try {
out.write(message);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
message = "";
filePath = null;
}
}
(6)在Notepad中编写退出程序的方法
/**
* 退出
*/
private static void exit() {
System.out.println("您已退出系统,谢谢使用!");
System.exit(0);
}
}