java - JFileChooser if/else 语句遇到问题

标签 java swing if-statement file-io jfilechooser

我试图允许用户选择已创建的 .ser 文件并保存它,或者通过在 JFileChooser 文本字段中输入新名称来创建新的 .ser 文件。正如您从下面的代码中看到的,我使用 if/else 语句来确定用户正在执行这两项操作中的哪一项。我遇到的问题是,无论我如何重新排列事物,或使用不同的 if 条件,JFileChooser 始终选择后一个选项(通过输入新名称创建新的 .ser 文件)。这不会是一个大问题,但它总是将“.ser”添加到文件中。

例如:如果我在 JFC 中创建一个名为 mySERObject 的新文件,它将保存为“mySERObject.ser”。现在,当我再次打开 JFC 并用鼠标选择 mySERObject.ser 进行保存时,它会创建一个名为“mySERObject.ser.ser”的新文件。

我使用 System.out.println 来查看执行了哪个语句,它始终是“打印的第一个语句”。这是我的代码:

    private void addSaveAsListener(JMenuItem item) {
        item.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                JFileChooser fc = new JFileChooser();
                FileNameExtensionFilter filter = new FileNameExtensionFilter(
                        "Serialized Object Files", "ser", ".ser");
                fc.setFileFilter(filter);
                final JTextField textField = getTextField(fc); //gets text from JFC textfield
                int returnVal = fc.showSaveDialog(null);
                String fileName = textField.getText();
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    if (!(fc.getSelectedFile().length() > 0)) {
                        System.out.println("first one printed");
                        File file = new File(fc.getCurrentDirectory(), fileName
                                + ".ser");
                        try {
                            file.createNewFile();
                            fileSystem.saveAs(addressbook.getCopyList(), file.getAbsolutePath()); //serializes arraylist
                        } catch (IOException e) {
                            JOptionPane.showMessageDialog(null,
                                    "File unable to be created.");
                        }

                    } else {
                        String path = fc.getSelectedFile().getAbsolutePath();
                        fileSystem.saveAs(addressbook.getCopyList(), path); //serializes arraylist
                        System.out.println("2nd one printed");
                    }
                }

            }
        });
    }

我想知道您是否可以帮助我解决问题或提供解决方案,谢谢。

最佳答案

问题一:总是多了一个后缀,怎么办?

查看示例中的以下代码。您将看到,您从 fc 获取文本字段,然后从中获取字符串(又名“mySERObject.ser”),然后再次保存,并附加“.ser”。您可以在进一步处理之前对 fileName 使用一些字符串操作来删除后缀(例如使用 fileName.replace(".ser", ""))。

final JTextField textField = getTextField(fc);
String fileName = textField.getText();
//fileName.replace(".ser", "")
File file = new File(fc.getCurrentDirectory(), fileName + ".ser");

问题 2:在我的 if/else block 中,仅选择 if 子句。为什么?

我个人对 JFileChooser 不太了解,但是 fc.getSelectedFile().length() 似乎不像你想象的那样工作,因为它总是返回 0。但是你可以只使用 fileName.length(),可以'你呢?

关于java - JFileChooser if/else 语句遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23138829/

相关文章:

java - JOGL 32 与 64 位库错误

java - 如何从哈希计算数组索引

java - 使用 JTextField 的对象调用 actionPerformed

java - JAVA如何同时显示2个if语句

java - Java 中的色度键效果

java - 在自定义控制台上监听打印文本事件?

JAVA:如何使用paint()方法更新之前绘制的对象?

linux - 如果满足偶然性,用文件 1 中的模式替换文件 2 中的模式

java - 如何在 Thymeleaf 中执行 if-else?

java - Glassfish 线程池、接受器线程、HTTP 最大连接数