Java 允许JFileChooser仅选择特定的文件名格式
在JFileChooser中,是否可以使用通配符设置FileFilter 当文件浏览器打开时,我希望用户在所有*.def文件中选择一个特定文件,如*.SomeFixedFormat.def文件 使用FileNameExtensionFilter,我可以为.def文件执行此操作,但不能为此特定文件执行此操作Java 允许JFileChooser仅选择特定的文件名格式,java,swing,jfilechooser,Java,Swing,Jfilechooser,在JFileChooser中,是否可以使用通配符设置FileFilter 当文件浏览器打开时,我希望用户在所有*.def文件中选择一个特定文件,如*.SomeFixedFormat.def文件 使用FileNameExtensionFilter,我可以为.def文件执行此操作,但不能为此特定文件执行此操作 FileNameExtensionFilter fileFilter=new FileNameExtensionFilter(".def", "def"); fileChooser.setFi
FileNameExtensionFilter fileFilter=new FileNameExtensionFilter(".def", "def");
fileChooser.setFileFilter(fileFilter);
更改
文件名扩展过滤器(“.def”,def)代码>到文件名扩展过滤器(“.def”,“u yourFixedFormat.def”)代码>。我不确定这是否有效。如果不是,则仅将其限制为.def,当您选择文件时,请检查文件名是否与您的格式相同,如果不相同,请再次打开JFileChooser。更改文件名扩展过滤器(“.def”,def)代码>到文件名扩展过滤器(“.def”,“u yourFixedFormat.def”)代码>。我不确定这是否有效。如果不是,则仅将其限制为.def,当您选择文件时,请检查文件名是否与您的格式相同,如果不相同,请再次打开JFileChooser。创建您自己的文件筛选器
JFileChooser fc = new JFileChooser();
fc.setFileFilter(new FileFilter(){
@Override
public boolean accept(File file){
// always accept directorys
if(file.isDirectory())
return true;
// but only files with specific name _SomeFixedFormat.def
return file.getName().equals("_SomeFixedFormat.def");
}
@Override
public String getDescription() {
return ".def";
}
});
创建自己的FileFilter
JFileChooser fc = new JFileChooser();
fc.setFileFilter(new FileFilter(){
@Override
public boolean accept(File file){
// always accept directorys
if(file.isDirectory())
return true;
// but only files with specific name _SomeFixedFormat.def
return file.getName().equals("_SomeFixedFormat.def");
}
@Override
public String getDescription() {
return ".def";
}
});
用法
滤器
package ui.filechooser.filter;
import java.io.File;
import javax.swing.filechooser.FileFilter;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.io.FilenameUtils;
/**
*
* @author Igor
*/
public class DefFileFilter extends FileFilter {
public final static String DEF_EXT = "def";
//def file name example : "DEfFile1", "DefFile2" ....
private String[] allowedNames;
public DefFileFilter() {
this(null);
}
public DefFileFilter(String names[]) {
this.allowedNames = name;
}
public boolean accept(File f) {
if (f.isDirectory()) {
return true;
}
String extension = getExtension(f);
if (extension != null) {
if (extension.equals(DEF_EXT)) {
if(allowedNames != null && !StringUtils.indexOfAny(getBaseName(f.getName), allowedNames)) {
return false;
} else {
return true;
}
} else {
return false;
}
}
return false;
}
public static String getBaseName(String fileName) {
int index = fileName.lastIndexOf('.');
if (index == -1) {
return fileName;
} else {
return fileName.substring(0, index);
}
}
public static String getExtension(File f) {
String ext = null;
String s = f.getName();
int i = s.lastIndexOf('.');
if (i > 0 && i < s.length() - 1) {
ext = s.substring(i + 1).toLowerCase();
}
return ext;
}
public String getDescription() {
return "Excel file";
}
}
package ui.filechooser.filter;
导入java.io.File;
导入javax.swing.filechooser.FileFilter;
导入org.apache.commons.lang.StringUtils;
导入org.apache.commons.io.FilenameUtils;
/**
*
*@作者伊戈尔
*/
公共类DefFileFilter扩展了FileFilter{
公共最终静态字符串DEF_EXT=“DEF”;
//def文件名示例:“DEfFile1”、“DefFile2”。。。。
私有字符串[]允许的名称;
公共DefFileFilter(){
这个(空);
}
公共DefFileFilter(字符串名称[]){
this.allowedNames=名称;
}
公共布尔接受(文件f){
if(f.isDirectory()){
返回true;
}
字符串扩展名=getExtension(f);
if(扩展名!=null){
if(扩展名等于(DEF_EXT)){
if(allowedNames!=null&!StringUtils.indexOfAny(getBaseName(f.getName),allowedNames)){
返回false;
}否则{
返回true;
}
}否则{
返回false;
}
}
返回false;
}
公共静态字符串getBaseName(字符串文件名){
int index=fileName.lastIndexOf('.');
如果(索引==-1){
返回文件名;
}否则{
返回fileName.substring(0,索引);
}
}
公共静态字符串getExtension(文件f){
字符串ext=null;
字符串s=f.getName();
int i=s.lastIndexOf('.');
如果(i>0&&i
用法
DefFileFilter fileFilter=new DefFileFilter (new String[] {"DEfFile1"});
fileChooser.setFileFilter(fileFilter);
滤器
package ui.filechooser.filter;
import java.io.File;
import javax.swing.filechooser.FileFilter;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.io.FilenameUtils;
/**
*
* @author Igor
*/
public class DefFileFilter extends FileFilter {
public final static String DEF_EXT = "def";
//def file name example : "DEfFile1", "DefFile2" ....
private String[] allowedNames;
public DefFileFilter() {
this(null);
}
public DefFileFilter(String names[]) {
this.allowedNames = name;
}
public boolean accept(File f) {
if (f.isDirectory()) {
return true;
}
String extension = getExtension(f);
if (extension != null) {
if (extension.equals(DEF_EXT)) {
if(allowedNames != null && !StringUtils.indexOfAny(getBaseName(f.getName), allowedNames)) {
return false;
} else {
return true;
}
} else {
return false;
}
}
return false;
}
public static String getBaseName(String fileName) {
int index = fileName.lastIndexOf('.');
if (index == -1) {
return fileName;
} else {
return fileName.substring(0, index);
}
}
public static String getExtension(File f) {
String ext = null;
String s = f.getName();
int i = s.lastIndexOf('.');
if (i > 0 && i < s.length() - 1) {
ext = s.substring(i + 1).toLowerCase();
}
return ext;
}
public String getDescription() {
return "Excel file";
}
}
package ui.filechooser.filter;
导入java.io.File;
导入javax.swing.filechooser.FileFilter;
导入org.apache.commons.lang.StringUtils;
导入org.apache.commons.io.FilenameUtils;
/**
*
*@作者伊戈尔
*/
公共类DefFileFilter扩展了FileFilter{
公共最终静态字符串DEF_EXT=“DEF”;
//def文件名示例:“DEfFile1”、“DefFile2”。。。。
私有字符串[]允许的名称;
公共DefFileFilter(){
这个(空);
}
公共DefFileFilter(字符串名称[]){
this.allowedNames=名称;
}
公共布尔接受(文件f){
if(f.isDirectory()){
返回true;
}
字符串扩展名=getExtension(f);
if(扩展名!=null){
if(扩展名等于(DEF_EXT)){
if(allowedNames!=null&!StringUtils.indexOfAny(getBaseName(f.getName),allowedNames)){
返回false;
}否则{
返回true;
}
}否则{
返回false;
}
}
返回false;
}
公共静态字符串getBaseName(字符串文件名){
int index=fileName.lastIndexOf('.');
如果(索引==-1){
返回文件名;
}否则{
返回fileName.substring(0,索引);
}
}
公共静态字符串getExtension(文件f){
字符串ext=null;
字符串s=f.getName();
int i=s.lastIndexOf('.');
如果(i>0&&i
更改文件名扩展过滤器(“.def”、“def”)
toFileNameExtensionFilter(“.def”,“_SomeFixedFormat.def”)代码>。请告诉我是不是works@Aelop不,更改文件名扩展过滤器(“.def”、“def”)无效
toFileNameExtensionFilter(“.def”,“_SomeFixedFormat.def”)代码>。请告诉我是不是works@Aelop不,它不起作用