java实现记事本另存为的功能代码及详细说明

Java实现记事本另存为功能的代码实现思路大致如下:

  1. 弹出保存对话框,获取用户输入的文件名和保存路径。
  2. 将当前编辑区域的文本内容保存到指定文件中。
  3. 更新文件保存状态和文件名等信息。

具体实现的代码如下:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class Notepad extends JFrame implements ActionListener {
    private static final long serialVersionUID = 1L;
    private TextArea textArea;
    private boolean isSaved; // 文件保存状态
    private String fileName; // 文件名

    public Notepad() {
        textArea = new TextArea();
        isSaved = false;

        JButton saveButton = new JButton("保存");
        saveButton.addActionListener(this);

        JButton saveAsButton = new JButton("另存为");
        saveAsButton.addActionListener(this);

        JPanel buttonPanel = new JPanel();
        buttonPanel.add(saveButton);
        buttonPanel.add(saveAsButton);

        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(textArea, BorderLayout.CENTER);
        getContentPane().add(buttonPanel, BorderLayout.SOUTH);

        setPreferredSize(new Dimension(400, 300));
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        new Notepad();
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("保存")) {
            if (!isSaved) { // 未保存过则调用另存为功能
                saveAs();
            } else {
                save();
            }
        } else if (e.getActionCommand().equals("另存为")) {
            saveAs();
        }
    }

    // 保存文件
    private void save() {
        try {
            FileWriter fw = new FileWriter(fileName);
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write(textArea.getText());
            bw.close();
            fw.close();
            isSaved = true;
        } catch (IOException e) {
            JOptionPane.showMessageDialog(this, "文件保存失败!");
        }
    }

    // 另存为
    private void saveAs() {
        Frame parent = new Frame();
        FileDialog fd = new FileDialog(parent, "另存为", FileDialog.SAVE);
        fd.setVisible(true);
        String dir = fd.getDirectory();
        String file = fd.getFile();
        if (dir != null && file != null) {
            fileName = dir + file;
            save();
        }
    }
}

这段代码中,首先定义了一个名为Notepad的类,其中包含了一个TextArea组件和两个JButton按钮。当用户点击“保存”或“另存为”按钮时,程序会根据用户的操作来执行保存或另存为的操作。

save()方法中,首先创建了一个FileWriter对象,用于将文本内容写入文件。然后将文本区域中的内容写入到指定的文件中。最后将isSaved变量设置为true,表示文件已经保存过。

saveAs()方法中,首先创建了一个FileDialog对话框,用于让

用户选择保存的文件路径和文件名。当用户选择好路径和文件名后,程序会将fileName变量设置为用户选择的路径和文件名,并调用save()方法保存文件。

需要注意的是,在保存文件时,如果文件保存失败,程序会弹出一个消息框提示用户。此外,当用户第一次保存文件时,程序会调用saveAs()方法,因为此时还没有保存的文件名和路径。

总体来说,以上代码实现了一个简单的记事本应用,其中包含了另存为功能。用户可以编辑文本内容并将其保存到指定的文件中。当用户需要保存为新的文件时,可以通过“另存为”功能来实现。