我用JFileChooser的保存文件对话框时,在文件名那个框中输入问号或者星号,对应的过滤filter的内容也会变成输入的文件名了?请问怎么解决啊?
比如,文件名输入aa*, 原本的filter是[*.html],点保存按钮之后,filter的内容就变成了[aa*]
我尝试重写了JFileChooser的approveSelect方法,结果还是无法实现
请高手帮忙指点一二
比如,文件名输入aa*, 原本的filter是[*.html],点保存按钮之后,filter的内容就变成了[aa*]
我尝试重写了JFileChooser的approveSelect方法,结果还是无法实现
请高手帮忙指点一二
import java.io.File;import javax.swing.JFileChooser;public class JValidateFileChooser extends JFileChooser { public void approveSelection() {
File file = getSelectedFile();
if (!validateFileName(file.getName())) {
return;
}
super.approveSelection();
} private boolean validateFileName(String name) {
if (name.indexOf('\\') != -1 || name.indexOf('/') != -1 || name.indexOf(':') != -1 || name.indexOf('*') != -1
|| name.indexOf('?') != -1 || name.indexOf('"') != -1 || name.indexOf('<') != -1
|| name.indexOf('>') != -1 || name.indexOf('|') != -1) {
return false;
} else {
return true;
}
}
}
import java.awt.HeadlessException;import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Test { public static void main(String[] args) {
try {
JFileChooser c = new LicenseFileChooser();
int result = c.showSaveDialog(new JFrame());
if(result == JFileChooser.APPROVE_OPTION){
c.approveSelection();
System.out.println(c.getSelectedFile());
}
} catch (HeadlessException e) {
e.printStackTrace();
}
}
static class LicenseFileChooser extends JFileChooser{
String sysdefine = "~`!@#$%^&()[]{}?<>:,\"";
//文件名是否包含特殊字符检测
private boolean validity(String name){
int len = sysdefine.toCharArray().length;
for(int i=0;i<len;i++){
if(name.indexOf(sysdefine.charAt(i))==-1){
return true;
}
}
return false;
}
public void approveSelection() {
String inputFileName = getSelectedFile().getName();
if (validity(inputFileName)) {
JOptionPane.showMessageDialog(getParent(), "文件名不能包含下列任何字符之一: \\ / : * ? \" < > |");
return;
}
super.approveSelection();
}
}
}
需要修改JDK中的内容