사용자가 이미 만든 .ser 파일을 선택하여 저장하거나 JFileChooser 텍스트 필드에 새 이름을 입력하여 새 .ser 파일을 만들 수있게하려고합니다. . 아래 코드에서 볼 수 있듯이 if/else 문을 사용하여 사용자가 수행중인 두 가지 작업을 결정합니다. 내가 겪고있는 문제는 어떻게 재배치하든 다른 if 조건을 사용하더라도 JFileChooser는 항상 후자의 옵션을 선택합니다 (새 이름을 입력하여 새로운 .ser 파일을 생성 함). 이것은 큰 문제는 아니지만 항상 ".ser"를 파일에 추가합니다.JFileChooser if/else 문에 문제가있는 경우
예 : mySERObject라는 JFC에서 새 파일을 만들면 "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");
}
}
}
});
}
무엇이 잘못 되었든 해결책을 제시하면 도움이 될지 궁금합니다. 감사합니다.
fileName.endsWith (". ser"), fileName.replace (". ser", "")의 경우 수행했습니다. 결국 저장 또는 덮어 쓰기가 종료되지 않았습니다. 그래서 그냥 삭제하고 대신 새 파일을 만들기로했습니다. fc.getSelectedFile(). length() 대신 if/else의 실패에 대해 fc.getSelectedFiles(). length()가 있어야합니다. 나는 s를 잊었다; 어떤 파일이 JFC에서 선택되었는지 확인하는 것이 었습니다. – Abdul