我試圖讓用戶選擇一個已經創建的.ser文件並保存,或者通過在JFileChooser文本框中鍵入一個新名稱來創建一個新的.ser文件。正如你從下面的代碼中可以看到的那樣,我使用了一個if/else語句來確定用戶正在執行哪一個操作。我遇到的問題是,不管我如何重新排列事物,或者使用不同的條件,JFileChooser都會選擇後一個選項(通過鍵入新名稱來創建一個新的.ser文件)。這不是一個大問題,但它總是將「.ser」添加到文件中。用JFileChooser遇到問題if/else語句
例如:如果我在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");
}
}
}
});
}
我想知道你是否能幫助我解決問題或提供解決方案,謝謝。
我做了if fileName.endsWith(「.ser」),然後fileName.replace(「.ser」,「」)。這最終甚至沒有保存或覆蓋。所以我決定刪除它並創建一個新文件。對於我的if/else失敗,而不是fc.getSelectedFile()。length(),它應該是fc.getSelectedFiles()。length()。我忘了s;這是看是否有任何文件從JFC中選出。 – Abdul