使用 JFileChooser 过滤文件类型

Posted

技术标签:

【中文标题】使用 JFileChooser 过滤文件类型【英文标题】:Filter file types with JFileChooser 【发布时间】:2013-10-18 13:59:16 【问题描述】:

我正在使用 JFileChooser 选择一个文件,并且我试图将显示限制为仅显示 jpg 或 jpeg 文件。我已经尝试过 FileFilter 和 ChoosableFileFilter 并且它不限制文件选择。这是我的代码:

JFileChooser chooser = new JFileChooser();
FileFilter filter = new FileNameExtensionFilter("JPEG file", new String[] "jpg", "jpeg");
chooser.setFileFilter(filter);
chooser.addChoosableFileFilter(filter);
int returnVal = chooser.showOpenDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION) 
  debug.put("You chose to open this file: " + chooser.getSelectedFile().getAbsolutePath());
  File selectedFile = new File(chooser.getSelectedFile().getAbsolutePath());
...

【问题讨论】:

在 Windows 7 上使用 JDK7 对我来说效果很好。我看到了所有目录。然后文件按扩展名过滤。 对我来说也一样。它完美运行,JDK 7 和 W7 【参考方案1】:

试试这个:

import javax.swing.JFileChooser;


JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileFilter() 

   public String getDescription() 
       return "JPG Images (*.jpg)";
   

   public boolean accept(File f) 
       if (f.isDirectory()) 
           return true;
        else 
           String filename = f.getName().toLowerCase();
           return filename.endsWith(".jpg") || filename.endsWith(".jpeg") ;
       
   
);

【讨论】:

【参考方案2】:

您的意思是“它不限制选择”,如“它允许任何文件类型的选项”?如果是这样,请尝试JFileChooser.setAcceptAllFileFilterUsed(boolean)

chooser.setAcceptAllFileFilterUsed(false);

根据JFileChooser documentation,它应该告诉它不要将所有文件类型的文件过滤器添加到文件过滤器列表中。

【讨论】:

【参考方案3】:

尝试使用fileChooser.setFileFilter(filter) 而不是fileChooser.addChoosableFileFilter(filter)

【讨论】:

【参考方案4】:

尝试在fileChooser.addChoosableFileFilter(filter)之后使用fileChooser.setFileFilter(filter),因为您需要将filter添加到fileChooser,然后将其设置为默认值。

这是一个很好的例子的链接: http://www.java2s.com/Code/Java/Swing-JFC/CustomizingaJFileChooser.htm

【讨论】:

我相信现代Java会在你设置时添加过滤器,如果它不在列表中。【参考方案5】:

这是一个示例代码!

private void btnChangeFileActionPerformed(java.awt.event.ActionEvent evt)                                               
        final JFileChooser fc = new JFileChooser();
        fc.addChoosableFileFilter(new ArffFilter());
        int returnVal = fc.showOpenDialog(this); 
        ... 
 

然后

class ArffFilter extends FileFilter 

@Override
public boolean accept(File file) 
    if (file.isDirectory()) 
        return true;
    
    String fileName = file.getName();
    int i = fileName.lastIndexOf('.');

    if (i > 0 && i < fileName.length() - 1) 
        if (fileName.substring(i + 1).toLowerCase().equals("arff")) 
            return true;
        
    

    return false;


    @Override
    public String getDescription() 
        return ".arff (Weka format)";
    

【讨论】:

以上是关于使用 JFileChooser 过滤文件类型的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式为 JFileChooser 设置文件过滤器

如何从 JFileChooser(JAVA Swing) 中禁用文件操作、文件选择和过滤面板?

简单的 JFileChooser FileFilter 不起作用

JFileChooser 过滤器

如何使用 JFileChooser 保存文件?

JFileChooser和FileFilter的使用,以及Java RandomAccessFile用法