【问题标题】:Filtering filechooser via filename通过文件名过滤文件选择器
【发布时间】:2015-06-25 02:33:36
【问题描述】:

我学会了如何使用 filefilter 来使用过滤器。

FileFilter filter = new FileNameExtensionFilter("JPEG file", "jpg", "jpeg");

但我想用包含某些字符串的文件过滤我的文件选择器,例如文件名中包含“sample”。

只能选择包含这些字符串的文件,并且此过滤器不得可编辑。我该怎么做?

【问题讨论】:

  • 写你自己的FileFilter。见How to use file choosersFiltering the List of Files
  • @MadProgrammer 我真的可以按文件名过滤吗?
  • 是的,文件扩展名只是名称的一部分。如果需要,您甚至可以使用正则表达式
  • @MadProgrammer 我发了一个答案,你看看对不对?
  • @MadProgrammer 现在我已经创建了它,我将如何使用它?我希望过滤后的文件出现在文件选择器中

标签: java swing filter filenames jfilechooser


【解决方案1】:
public class ImageFilter extends FileFilter {

    //Accept all directories and all jpeg, jpg files with lossy in its filename.
    public boolean accept(File f) {
        if (f.isDirectory()) {
            return true;
        }

        String extension = Utils.getExtension(f);
        String filename = Utils.getName(f);
        if (extension != null) {
            if ((extension.equals(Utils.jpeg) || extension.equals(Utils.jpg)) && filename.contains("lossy")) {
                    return true;
            } else {
                return false;
            }
        }

        return false;
    }

    //The description of this filter
    public String getDescription() {
        return "Images (Lossy)";
    }
}

这是我的实用程序类

public class Utils {
    public final static String jpeg = "jpeg";
    public final static String jpg = "jpg";

/*
 * Get the extension of a file.
 */
    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 static String getName(File f) {
        String fname = null;
        String s = f.getName();
        int i = s.length() - s.lastIndexOf('.');
        fname = s.substring(0,s.length()-i);

        return fname;
    }

    /** Returns an ImageIcon, or null if the path was invalid. */
    protected static ImageIcon createImageIcon(String path) {
        java.net.URL imgURL = Utils.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);
            return null;
        }
    }
}

申请,

fc.addChoosableFileFilter(new ImageFilter());

【讨论】:

  • 已修改为在 getName 中获取正确的扩展字符数以获取正确的文件名字符数
猜你喜欢
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
相关资源
最近更新 更多