Java模拟记事本

来源: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);
	}
}

  • 10
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无知的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值