2014-04-17 3 views
0

사용자가 이미 만든 .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"); 
        } 
       } 

      } 
     }); 
    } 

무엇이 잘못 되었든 해결책을 제시하면 도움이 될지 궁금합니다. 감사합니다.

답변

1

질문 1 : 항상 다른 접미사가 추가됩니다. 어떻게해야합니까?

예를 들어 다음 코드를 살펴보십시오. fc에서 텍스트 필드를 얻은 다음 해당 문자열 (일명 "mySERObject.ser")을 가져온 다음 ".ser"appendig를 사용하여 다시 저장하십시오. 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 블록에만 if 절이 선택됩니다. 왜?

저는 개인적으로 JFileChooser에 대해 잘 모릅니다. 그러나 fc.getSelectedFile(). length()는 항상 0을 반환하기 때문에 생각했던 것처럼 작동하지 않는 것 같습니다.하지만 fileName.length(), can 너?

+0

fileName.endsWith (". ser"), fileName.replace (". ser", "")의 경우 수행했습니다. 결국 저장 또는 덮어 쓰기가 종료되지 않았습니다. 그래서 그냥 삭제하고 대신 새 파일을 만들기로했습니다. fc.getSelectedFile(). length() 대신 if/else의 실패에 대해 fc.getSelectedFiles(). length()가 있어야합니다. 나는 s를 잊었다; 어떤 파일이 JFC에서 선택되었는지 확인하는 것이 었습니다. – Abdul