【问题标题】:Allow JFileChooser to select only specific filename format允许 JFileChooser 仅选择特定的文件名格式
【发布时间】:2016-12-13 10:55:41
【问题描述】:

是否可以在 JFileChooser 中使用带有通配符的 FileFilter ?

当文件浏览器打开时,我希望用户在所有 *.def 文件中选择一个特定文件,例如 *_SomeFixedFormat.def 文件。

使用 FileNameExtensionFilter 我可以为 .def 文件执行此操作,但不适用于此特定文件。

FileNameExtensionFilter fileFilter=new FileNameExtensionFilter(".def", "def");
fileChooser.setFileFilter(fileFilter);

【问题讨论】:

  • 将FileNameExtensionFilter(".def", "def"); 更改为FileNameExtensionFilter(".def", "_SomeFixedFormat.def");。请告诉我它是否有效
  • @Aelop 不,它不起作用

标签: java swing jfilechooser


【解决方案1】:

创建您自己的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";
    }
});

【讨论】:

    【解决方案2】:

    将FileNameExtensionFilter(".def", def); 更改为FileNameExtensionFilter(".def", "_yourFixedFormat.def");。我不确定这是否有效。如果不是,则只限制为.def,当你选择一个文件时,检查文件名是否与你的格式一致,如果不是,再次打开JFileChooser。

    【讨论】:

      【解决方案3】:

      用法

      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";
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-05-08
        • 1970-01-01
        • 1970-01-01
        • 2020-06-05
        • 2020-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多