上一篇
下载JDK并配置环境变量;用文本编辑器写Java代码保存为
XXX.java;CMD中进入文件目录,输入
javac XXX.java编译,再输入
java XXX
前期准备
必要工具安装
| 工具名称 | 作用 | 下载地址 | 备注 |
|---|---|---|---|
| JDK | Java开发工具包 | Oracle官网/OpenJDK | 需配置JAVA_HOME环境变量 |
| 文本编辑器 | 编写源代码 | Notepad++/VS Code/Sublime Text | 推荐支持语法高亮的工具 |
| 命令行终端 | 编译/运行Java程序 | Windows CMD/Linux/macOS终端 | |
| 可选 IDE | 集成开发环境 | Eclipse/IntelliJ IDEA/NetBeans | 简化项目管理与调试 |
目录结构规划
建议创建如下层级的项目文件夹:
MyNotepadProject/
├── src/ # 存放Java源代码
│ └── com/example/ # 包名(自定义)
│ └── SimpleNotepad.java
└── data/ # 用于存储用户文件(可选)
核心代码实现
以下是一个基于Swing的极简记事本完整代码(SimpleNotepad.java):
package com.example;
import javax.swing.;
import java.awt.;
import java.awt.event.;
import java.io.;
public class SimpleNotepad extends JFrame {
private JTextArea textArea;
private String currentFilePath = "";
public SimpleNotepad() {
// 初始化窗口属性
setTitle("Java简易记事本");
setSize(800, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null); // 居中显示
// 创建菜单栏
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("文件(F)");
JMenuItem newItem = new JMenuItem("新建");
JMenuItem openItem = new JMenuItem("打开...");
JMenuItem saveItem = new JMenuItem("保存");
JMenuItem exitItem = new JMenuItem("退出");
// 添加菜单项到菜单
fileMenu.add(newItem);
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.addSeparator();
fileMenu.add(exitItem);
menuBar.add(fileMenu);
setJMenuBar(menuBar);
// 创建文本编辑区
textArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(textArea);
add(scrollPane, BorderLayout.CENTER);
// 绑定事件监听器
newItem.addActionListener(e -> textArea.setText(""));
openItem.addActionListener(this::openFile);
saveItem.addActionListener(this::saveFile);
exitItem.addActionListener(e -> System.exit(0));
}
// 打开文件方法
private void openFile(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser();
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
currentFilePath = selectedFile.getAbsolutePath();
try (BufferedReader reader = new BufferedReader(new FileReader(selectedFile))) {
StringBuilder content = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
content.append(line).append("n");
}
textArea.setText(content.toString());
} catch (IOException ex) {
JOptionPane.showMessageDialog(this, "文件读取失败: " + ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
}
}
}
// 保存文件方法
private void saveFile(ActionEvent e) {
if (!currentFilePath.isEmpty()) {
// 直接保存到已有文件
writeToFile(currentFilePath);
} else {
// 首次保存触发另存为
saveAsFile();
}
}
// 另存为方法
private void saveAsFile() {
JFileChooser fileChooser = new JFileChooser();
int result = fileChooser.showSaveDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
currentFilePath = selectedFile.getAbsolutePath();
writeToFile(currentFilePath);
}
}
// 通用文件写入方法
private void writeToFile(String filePath) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
writer.write(textArea.getText());
JOptionPane.showMessageDialog(this, "文件保存成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
} catch (IOException ex) {
JOptionPane.showMessageDialog(this, "文件保存失败: " + ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
}
}
public static void main(String[] args) {
// 确保GUI在事件调度线程中运行
SwingUtilities.invokeLater(() -> {
new SimpleNotepad().setVisible(true);
});
}
}
编译与运行步骤
方法一:通过命令行手动操作
- 定位到源码目录
打开终端/CMD,进入src目录(假设项目结构如前所述):cd path/to/MyNotepadProject/src/com/example/
- 编译Java文件
执行以下命令生成.class字节码文件:javac SimpleNotepad.java
▶️ 成功标志:无报错且生成
SimpleNotepad.class文件。 - 运行程序
输入以下命令启动记事本:java SimpleNotepad
▶️ 注意:若出现
Error: Could not find or load main class,请检查三点:①当前目录是否包含SimpleNotepad.class;②类名拼写是否正确;③是否已正确安装JDK。
️ 方法二:通过IDE运行(以IntelliJ IDEA为例)
- 导入项目
打开IDE →File→Open→ 选择项目根目录。 - 创建运行配置
右键点击SimpleNotepad.java→Run 'SimpleNotepad.main()'。 - 调试与修改
可直接在IDE中修改代码后重新运行,无需手动编译。
功能扩展建议
| 功能 | 实现思路 | 涉及技术点 |
|---|---|---|
| 字体大小调整 | 添加下拉框选择字体尺寸,动态修改JTextArea的字体属性 |
Font类、动作监听器 |
| 查找替换 | 弹出对话框输入关键词,调用JTextArea的replaceRange()方法实现替换 |
正则表达式、字符串处理 |
| 状态栏显示光标位置 | 添加JLabel作为状态栏,监听文本区焦点事件并实时更新字符计数 |
文档监听器、布局管理器 |
| 多标签页 | 改用JTabbedPane替代单一文本区,支持多个文档同时编辑 |
复合布局、集合管理 |
常见问题排查
Q1: 运行时提示ClassNotFoundException怎么办?
原因:类路径(Classpath)未正确设置,导致JVM找不到目标类。
解决方案:
- 命令行运行时需切换到
.class文件所在目录; - IDE中检查模块依赖配置;
- 确保类名与文件名完全一致(区分大小写)。
Q2: 保存文件时报Access Denied错误?
原因:程序没有权限向指定路径写入文件。
解决方案:
- 更换保存路径至用户主目录或桌面;
- 在代码中捕获
SecurityException并提供友好提示; - Windows系统右键点击程序图标→属性→兼容性→勾选“以管理员身份运行”。
相关问答FAQs
Q: 这个记事本能打开Word文档吗?
A: 不能直接打开.docx格式文件,本程序仅支持纯文本文件(.txt),如需支持富文本,需改用JEditorPane并集成RTF解析库。
Q: 如何让记事本记住上次打开的文件列表?
A: 可通过以下步骤实现:
- 使用
Preferences API或配置文件(如properties文件)存储历史记录; - 每次启动时读取历史记录并更新菜单;
- 添加“最近打开”子菜单项,绑定双击事件打开对应文件。
示例代码片段:// 保存最近打开的文件路径到数组 String[] recentFiles = new String[5]; // 最多记录5个文件 // 读取/写入逻辑需结合文件
