10

我是Java的初学者。我正在使用它的 GUI 编辑器在 netbeans 7(.3) IDE 中制作一个简单的文本编辑器。我面临的主要问题是我无法保存/打开文件。我创建了“保存”按钮。当我放下文件选择器时,它是一个嵌入在 java 窗口中的普通打开文件对话框,根本没有任何功能。我还尝试在单击保存按钮时(在源视图中)创建一个新的 jFileChooser,但它不起作用。

简而言之,我需要一个简单的打开/保存对话框。当按下“保存”按钮时,保存对话框将打开并保存用户选择的任何名称和 .rtf 或 .txt 扩展名的文件。(PS:Java 中是否可以将文件保存为 .docx 或 .doc?)
当按下“打开”按钮时,它会打开一个 .rtf 或 .txt 文件(同样,是否可以打开 .docx 或Java中的.doc?)通过文件选择器。

    private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {                                           
    JFileChooser saveFile = new JFileChooser();
    if saveFile.showSaveDialog(modalToComponent) == JFileChooser.APPROVE_OPTION {
        File xyz = saveFile.getSelectedFile();
    }
}

代码在这里:https ://docs.google.com/file/d/0B766zz1iJ1LRN2lGRjNtM29vN2M/edit?usp=sharing

4

4 回答 4

21

我创建了一个示例 UI,它显示了保存和打开文件对话框。单击保存按钮打开保存对话框,然后单击打开按钮打开文件对话框。

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class FileChooserEx {
    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                new FileChooserEx().createUI();
            }
        };

        EventQueue.invokeLater(r);
    }

    private void createUI() {
        JFrame frame = new JFrame();
        frame.setLayout(new BorderLayout());

        JButton saveBtn = new JButton("Save");
        JButton openBtn = new JButton("Open");

        saveBtn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                JFileChooser saveFile = new JFileChooser();
                saveFile.showSaveDialog(null);
            }
        });

        openBtn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                JFileChooser openFile = new JFileChooser();
                openFile.showOpenDialog(null);
            }
        });

        frame.add(new JLabel("File Chooser"), BorderLayout.NORTH);
        frame.add(saveBtn, BorderLayout.CENTER);
        frame.add(openBtn, BorderLayout.SOUTH);
        frame.setTitle("File Chooser");
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
于 2013-03-29T14:15:09.340 回答
3

我认为你面临三个问题:

  1. 了解 FileChooser
  2. 写/读文件
  3. 了解扩展名和文件格式

广告 1. 您确定已将 FileChooser 连接到正确的面板/容器吗?我会去找一个关于这个问题的简单教程,看看它是否有效。这是最好的学习方式——向前迈出小而大的步伐。有时将问题分解为这些部分可能会很棘手;)

广告。2. 保存或打开文件后,您应该有写入或读取文件的方法。在这个问题上也有非常简洁的例子,而且很容易理解这个话题。

广告。3. 有扩展名的文件和文件格式是有区别的。您可以将任何文件的格式更改为您想要的任何格式,但这不会影响其内容。它可能只会使与此类扩展名关联的应用程序无法读取文件。TXT 文件很容易——您可以阅读您所写的内容。XLS、DOCX 等需要更多的工作,通常框架是解决这些问题的最佳方法。

于 2013-03-29T13:24:51.743 回答
2

以任何格式保存是非常可能的。检查以下 - http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html

第二,你期望保存对话框工作的究竟是什么,它的工作原理是这样的,打开一个 doc 文件是很有可能的 - http://srikanthtechnologies.com/blog/openworddoc.html

于 2013-03-29T13:51:18.647 回答
0

这是一个例子

private void doOpenFile() {
    int result = myFileChooser.showOpenDialog(this);

    if (result == JFileChooser.APPROVE_OPTION) {
        Path path = myFileChooser.getSelectedFile().toPath();

        try {
            String contentString = "";

            for (String s : Files.readAllLines(path, StandardCharsets.UTF_8)) {
                contentString += s;
            }

            jText.setText(contentString);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

private void doSaveFile() {
    int result = myFileChooser.showSaveDialog(this);

    if (result == JFileChooser.APPROVE_OPTION) {
        // We'll be making a mytmp.txt file, write in there, then move it to
        // the selected
        // file. This takes care of clearing that file, should there be
        // content in it.
        File targetFile = myFileChooser.getSelectedFile();

        try {
            if (!targetFile.exists()) {
                targetFile.createNewFile();
            }

            FileWriter fw = new FileWriter(targetFile);

            fw.write(jText.getText());
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
于 2017-06-21T17:50:40.523 回答