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