2014-04-17 174 views
0

我試圖讓用戶選擇一個已經創建的.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"); 
        } 
       } 

      } 
     }); 
    } 

我想知道你是否能幫助我解決問題或提供解決方案,謝謝。

回答

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

我做了if fileName.endsWith(「.ser」),然後fileName.replace(「.ser」,「」)。這最終甚至沒有保存或覆蓋。所以我決定刪除它並創建一個新文件。對於我的if/else失敗,而不是fc.getSelectedFile()。length(),它應該是fc.getSelectedFiles()。length()。我忘了s;這是看是否有任何文件從JFC中選出。 – Abdul