Java 保存已添加文件扩展名的现有文件时不提示覆盖消息

Java 保存已添加文件扩展名的现有文件时不提示覆盖消息,java,swing,jfilechooser,overwrite,Java,Swing,Jfilechooser,Overwrite,对于我正在进行的GUI项目,我正试图很好地降低保存机制。我目前正在重写文件,遇到了一点问题 下面是我创建的一个测试用例: 使用另存为保存当前文件。当提示输入文件名时,请提供一个现有文件名,并添加文件扩展名。 假设调用了一个已经存在的文件:test.config 如果我输入:test并按save,就会弹出一个覆盖提示,这就是我想要的 如果我输入:test.config并按save键,将弹出覆盖提示,程序将继续。这不是我想要的。我想要一个覆盖提示弹出并警告用户 我一直在各种网站和Javadocs中搜

对于我正在进行的GUI项目,我正试图很好地降低保存机制。我目前正在重写文件,遇到了一点问题

下面是我创建的一个测试用例:

使用另存为保存当前文件。当提示输入文件名时,请提供一个现有文件名,并添加文件扩展名。

假设调用了一个已经存在的文件:
test.config

如果我输入:
test
并按save,就会弹出一个覆盖提示,这就是我想要的

如果我输入:
test.config
并按save键,将弹出覆盖提示,程序将继续。这不是我想要的。我想要一个覆盖提示弹出并警告用户

我一直在各种网站和Javadocs中搜索文件,但如果用户键入额外的扩展名,我似乎不知道如何检查文件是否存在

以下是一些可能有助于你们理解的代码:

...

int returnVal = fc.showSaveDialog(Dialogc.this);
if(returnVal != JFileChooser.APPROVE_OPTION) {
        JOptionPane.showMessageDialog(null,
            "Error saving file. \nFile not saved.");
        return 1;
}

// Get file name
file = fc.getSelectedFile();

/* Check if file exists */
if(file.exists()) {
    JOptionPane.showConfirmDialog(null, 
        "File already exists. Overwrite?", "Overwrite Prompt",  
        JOptionPane.YES_NO_OPTION);
}
else {
    // If it doesn't exist, create new file
}
...

注意:我确实有添加或删除扩展的方法。我是否应该使用这些方法来帮助检查给定文件是否已经存在?

覆盖
approveSelection(…)
方法以确认文件的过度写入:

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.plaf.basic.*;

public class FileChooserSave
{
    private static void createAndShowUI()
    {
        final JFileChooser chooser = new JFileChooser( new File(".") )
        {
            public void approveSelection()
            {
                if (getSelectedFile().exists())
                {
                    int n = JOptionPane.showConfirmDialog(
                        this,
                        "Do You Want to Overwrite File?",
                        "Confirm Overwrite",
                        JOptionPane.YES_NO_OPTION);

                    if (n == JOptionPane.YES_OPTION)
                        super.approveSelection();

                }
                else
                    super.approveSelection();
            }
        };

        chooser.setSelectedFile( new File("something.rob") );
        int returnVal = chooser.showSaveDialog(null);


        if(returnVal == JFileChooser.APPROVE_OPTION)
        {
           System.out.println(chooser.getSelectedFile() );
        }
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}

我遇到了相反的问题。。。如果用户未键入扩展名,则不会提示。如果用户没有键入扩展名,我会在以后添加它。因此,在您的情况下,如果用户键入“test”,我的代码将把文件保存为“test.config”。我想你的也是这样

为了修复它,我还必须在审批过程中添加扩展。。。因此,首先:

final JFileChooser fc = new JFileChooser(){
@Override
public void approveSelection(){

    File f = getSelectedFile();
            String filestring = f.toString();

            String[] left_side_of_dot = filestring.split("\\.");

             f = new File(left_side_of_dot[0] + ".config");


    if(f.exists() && getDialogType() == SAVE_DIALOG){
        int result = JOptionPane.showConfirmDialog(YOUR_Frame,"The file exists, overwrite?","Existing file",JOptionPane.YES_NO_CANCEL_OPTION);
        switch(result){
            case JOptionPane.YES_OPTION:
                super.approveSelection();
                return;
            case JOptionPane.NO_OPTION:
                return;
            case JOptionPane.CLOSED_OPTION:
                return;
            case JOptionPane.CANCEL_OPTION:
                cancelSelection();
                return;
        }
    }
    super.approveSelection();
 }
};
然后在保存之前:

String noxtfilename = filename.substring(0, filename.length()-7);
    File file = new File(noxtfilename);
    fc.setSelectedFile(file); }
 FileNameExtensionFilter filefilter = new  FileNameExtensionFilter("Config File (*.config)","config");

 fc.setFileFilter(filefilter);


    int returnVal = fc.showSaveDialog(YOUR_Frame);

        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File file = fc.getSelectedFile();
            String filestring = file.toString();

            String[] left_side_of_dot = filestring.split("\\.");

             file = new File(left_side_of_dot[0] + ".config");

我事先道歉;我对Java相当陌生。我理解重写方法,但我不确定如何解决我的问题?提示覆盖消息没有问题,只有当我尝试保存为
现有的\u filename.config
时,注意.config,我才没有收到消息。