Java要求覆盖jfilechooser

时间:2012-11-25 23:28:37

标签: java swing file jfilechooser overwrite

我有一个函数应该在jfilechooser的textinput中输入文件的路径并将其传递给String。问题是,如果文件已存在,我想检查覆盖。我确实知道如何做到这一点,但我的问题是,如果对JOptionPane回答JFileChooser仍会关闭,因为保存按钮已被采取行动。现在,我需要的是,如果答案是,程序将返回JFileChooser,仍然提示输入名称。

请注意我正在寻找一个有效的解决方案,我已经考虑过再次执行该功能,但由于我的程序非常庞大,这种解决问题的方法会花费时间而且效率不高。

这是我的功能的代码,但尚未完成,因为我不知道如何处理它。

`public String FileSavePath()throws NullPointerException
    {
        File f=null;
        String theFilepath=null;
        JFileChooser FileChooser = new JFileChooser();
        if(FileChooser.showSaveDialog(null)==JFileChooser.APPROVE_OPTION)
        {
            theFilepath=FileChooser.getSelectedFile().getAbsolutePath();
            f=FileChooser.getSelectedFile();
            //System.out.println(theFile);
            if(f.exists())
            {
                int result = JOptionPane.showConfirmDialog(this,"The file exists, overwrite?",
                        "Existing file",JOptionPane.YES_NO_CANCEL_OPTION);
                if(result==JOptionPane.YES_OPTION)
                           {
                   return theFilepath;

                  }
          else // here is what I should do if the user answers 'no' or cancels/closes the JOptionPane
        }
        else return null;
        return theFilepath;

    }`

1 个答案:

答案 0 :(得分:2)

您需要将查询置于循环中,直到用户可以为您提供可接受的响应为止......

public String FileSavePath() throws NullPointerException {

    boolean acceptable = false;
    String theFilepath = null;

    do {
        theFilepath = null
        File f = null;
        JFileChooser FileChooser = new JFileChooser();
        if (FileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
            theFilepath = FileChooser.getSelectedFile().getAbsolutePath();
            f = FileChooser.getSelectedFile();
            //System.out.println(theFile);
            if (f.exists()) {
                int result = JOptionPane.showConfirmDialog(this, "The file exists, overwrite?",
                        "Existing file", JOptionPane.YES_NO_CANCEL_OPTION);
                if (result == JOptionPane.YES_OPTION) {
                    acceptable = true;
                }
            } else {
                acceptable = true;
            }
        } else {
            acceptable = true;
        }
    } while (!acceptable);

    return theFilepath;

}