如何保存文本文件而不必每次都输入文件名?

时间:2014-05-17 16:54:21

标签: java

大家好我正在创建一个简单的文本编辑器作为项目,在保存键入文件的内容方面我遇到了麻烦。我可以使用“另存为”原则保存文件,并提示用户输入文件名。

我遇到的问题是实现Save,以便它保存到打开的文件,而不必每次都进入对话框,就像有人做Ctrl + S一样。任何人都有任何想法我将如何实现此功能?

以下是我的一些代码:

JMenuItem saveFile = new JMenuItem(new AbstractAction("Save") {

    @Override
    public void actionPerformed(ActionEvent e) {
        JFileChooser save = new JFileChooser();
        File filename = save.getSelectedFile();
        if(opened == false && saved == false) {
            save.showSaveDialog(null);
            int confirmationResult;
            if(filename.exists()) {
            confirmationResult = JOptionPane.showConfirmDialog(getParent(), "Replace existing file?");
                if(confirmationResult == JOptionPane.YES_OPTION) {
                    saveFile(filename);                     
                }
            } else {
                saveFile(filename);
            }
        } else {
            saveFile(filename);
        }
    }
});
saveFile.setPreferredSize(new Dimension(100, 20));
saveFile.setEnabled(true);

保存方法:

private void saveFile(File filename) {
    try {
        BufferedWriter writer = new BufferedWriter(new FileWriter(filename));
        writer.write(textArea.getText());
        writer.close();
        saved = true;
        editorWindow.setTitle("JavaText - " + filename.getName());
    } catch (IOException err) {
        err.printStackTrace();
    }
}

3 个答案:

答案 0 :(得分:3)

如果将打开的File对象存储在应用程序的某个位置,则可以使用KeyListener或KeyAdapter在按键上将其传递到saveFile方法。如果没有看到更多的应用程序,很难说它最好放在哪里,但如果你只是将它存储在某个地方的变量中,你可以参考它。

答案 1 :(得分:1)

  1. 将文件名存储在某处
  2. if(nameOfFile != null)然后不显示对话框并转到保存方法
  3. else显示对话框并调用保存方法
  4. 这就是我要做的事情

答案 2 :(得分:0)

以下程序显示了“保存”的实施情况。文本编辑器的“另存为”功能。运行它将显示带 JTextArea JFrame ,保存 JButton &另存为 JButton

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class MyFrame extends JFrame {

    private boolean alreadySaved = false;
    private BufferedWriter bw;
    private JFileChooser fileChooser;
    private JTextArea jta;
    private File file;
    private JButton save;
    private JPanel mainPanel;
    private JButton saveAs;

    public MyFrame() {
        initComponents();

        save.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                if (!alreadySaved) {
                    int response = fileChooser.showSaveDialog(getParent());
                    file = fileChooser.getSelectedFile();
                    if (response == JFileChooser.APPROVE_OPTION) {
                        writeFile();
                        alreadySaved = true;
                    }
                } else
                    writeFile();
            }

        });

        saveAs.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                int response = fileChooser.showSaveDialog(getParent());
                file = fileChooser.getSelectedFile();
                if (response == JFileChooser.APPROVE_OPTION) {
                    writeFile();
                    alreadySaved = true;
                }
            }
        });

    } // END of Constructor

    public void writeFile() {
        try {
            bw = new BufferedWriter(new FileWriter(file));
            bw.write(jta.getText());
            bw.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void initComponents() {
        fileChooser = new JFileChooser();
        saveAs = new JButton("Save as");
        jta = new JTextArea(10, 40);
        mainPanel = new JPanel();
        mainPanel.setBackground(Color.red);
        save = new JButton("Save");
        mainPanel.add(save);
        mainPanel.add(saveAs);
        this.setLayout(new BorderLayout());
        this.add(jta);
        this.add(mainPanel, BorderLayout.SOUTH);
        this.pack();
        this.setLocationRelativeTo(null);
    }

    public static void main(String[] args) {
        new MyFrame().setVisible(true);
    }
}