当前位置:首页 > 后端开发 > 正文

java记事本怎么运行

下载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);
        });
    }
}

编译与运行步骤

方法一:通过命令行手动操作

  1. 定位到源码目录
    打开终端/CMD,进入src目录(假设项目结构如前所述):

    cd path/to/MyNotepadProject/src/com/example/
  2. 编译Java文件
    执行以下命令生成.class字节码文件:

    javac SimpleNotepad.java

    ▶️ 成功标志:无报错且生成SimpleNotepad.class文件。

  3. 运行程序
    输入以下命令启动记事本:

    java SimpleNotepad

    ▶️ 注意:若出现Error: Could not find or load main class,请检查三点:①当前目录是否包含SimpleNotepad.class;②类名拼写是否正确;③是否已正确安装JDK。

️ 方法二:通过IDE运行(以IntelliJ IDEA为例)

  1. 导入项目
    打开IDE → FileOpen → 选择项目根目录。
  2. 创建运行配置
    右键点击SimpleNotepad.javaRun 'SimpleNotepad.main()'
  3. 调试与修改
    可直接在IDE中修改代码后重新运行,无需手动编译。

功能扩展建议

功能 实现思路 涉及技术点
字体大小调整 添加下拉框选择字体尺寸,动态修改JTextArea的字体属性 Font类、动作监听器
查找替换 弹出对话框输入关键词,调用JTextAreareplaceRange()方法实现替换 正则表达式、字符串处理
状态栏显示光标位置 添加JLabel作为状态栏,监听文本区焦点事件并实时更新字符计数 文档监听器、布局管理器
多标签页 改用JTabbedPane替代单一文本区,支持多个文档同时编辑 复合布局、集合管理

常见问题排查

Q1: 运行时提示ClassNotFoundException怎么办?

原因:类路径(Classpath)未正确设置,导致JVM找不到目标类。
解决方案

  • 命令行运行时需切换到.class文件所在目录;
  • IDE中检查模块依赖配置;
  • 确保类名与文件名完全一致(区分大小写)。

Q2: 保存文件时报Access Denied错误?

原因:程序没有权限向指定路径写入文件。
解决方案

  • 更换保存路径至用户主目录或桌面;
  • 在代码中捕获SecurityException并提供友好提示;
  • Windows系统右键点击程序图标→属性→兼容性→勾选“以管理员身份运行”。

相关问答FAQs

Q: 这个记事本能打开Word文档吗?

A: 不能直接打开.docx格式文件,本程序仅支持纯文本文件(.txt),如需支持富文本,需改用JEditorPane并集成RTF解析库。

Q: 如何让记事本记住上次打开的文件列表?

A: 可通过以下步骤实现:

  1. 使用Preferences API或配置文件(如properties文件)存储历史记录;
  2. 每次启动时读取历史记录并更新菜单;
  3. 添加“最近打开”子菜单项,绑定双击事件打开对应文件。
    示例代码片段:

    // 保存最近打开的文件路径到数组
    String[] recentFiles = new String[5]; // 最多记录5个文件
    // 读取/写入逻辑需结合文件
0