遇到JFileChooser if / else语句有问题

时间:2014-04-17 16:40:42

标签: 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");
                    }
                }

            }
        });
    }

我想知道你是否可以帮助我解决错误或提供解决方案,谢谢。

1 个答案:

答案 0 :(得分:1)

问题1:总是添加了另一个后缀,我该怎么办?

查看示例中的以下代码。您将看到,您从fc获取文本字段,然后从中获取字符串(又名" mySERObject.ser")然后您再次保存,使用" .ser" appendig。您可以在进一步处理之前使用fileName上的一些String opperations来删除后缀(例如使用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块中,只选择if子句。为什么呢?

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

相关问题