我尝试允许用户选择已创建的.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");
}
}
}
});
}
我想知道你是否可以帮助我解决错误或提供解决方案,谢谢。
答案 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(),不能吗?