我试图允许用户选择已创建的 .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/