如何在Java中限制文件选择器只能选择特定类型的文件?

14
private void openMenuActionPerformed(java.awt.event.ActionEvent evt) {
    
    DBmanager db = new DBmanager();
    if (!db.getCurrentUser().equals("Admin")) {
        JOptionPane.showMessageDialog(this, "You are Not Allowed to Run Applications");
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("PDF Documents", "pdf"));
        fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("MS Office Documents", "docx", "xlsx", "pptx"));
        fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("Images", "jpg", "png", "gif", "bmp"));
        fileChooser.setAcceptAllFileFilterUsed(false);
        int returnVal = fileChooser.showOpenDialog(this);

        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File file = fileChooser.getSelectedFile();

            if (Desktop.isDesktopSupported()) {
                try {
                    Desktop.getDesktop().open(file);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    } else if (db.getCurrentUser().equals("Admin")) {
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setAcceptAllFileFilterUsed(true);
        int returnVal = fileChooser.showOpenDialog(this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File file = fileChooser.getSelectedFile();
            if (Desktop.isDesktopSupported()) {
                try {
                    Desktop.getDesktop().open(file);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }// TODO add your handling code here:
}

我试图通过设置fileChooser.setAcceptAllFileFilterUsed(false);来过滤文件过滤器中的文件。"所有文件"选项从FileChooser中消失,但是所有文件仍然可见,除非您从PDF文档、MS Office或图像中选择一个选项。我希望在打开文件选择器时只有我的三个自定义过滤器。


1
使用 setFileFilter(FileFilter filter) 在加载时设置默认过滤器。 - BlackBox
你有没有阅读过 文件选择器教程?它详细解释了如何使用文件过滤器以及 FileView。另外,为了更快得到帮助,请发布一个 SSCCE - Andrew Thompson
谢谢......添加默认过滤器可以使文件选择器正常工作。fileChooser.setFileFilter(new FileNameExtensionFilter("PDF文档", "pdf")); - Julius Gitonga
4个回答

19
例如,如果您想要过滤您的 JFileChooser 只显示最常见的图像文件,您可以使用类似以下的代码:
FileNameExtensionFilter filter = new FileNameExtensionFilter("Image Files", "jpg", "png", "gif", "jpeg");
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(filter);

第一个参数是描述(在底部选择时显示的内容),第二个参数是非正式文件扩展名。


2
您可以使用FileNameExtensionFilter为您的FileChooser对话框添加允许的文件扩展名。以下是一个示例:
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
    "JPG & GIF Images", "jpg", "gif");
chooser.setFileFilter(filter);

更多信息,请参考Javadocs:FileNameExtensionFilter


0
在我的情况下,我必须放置


setFileFilter(          
    new FileNameExtensionFilter("Default file filter", ...)
);

在该方法的所有其他调用之后

addChoosableFileFilter(...);

使 setAcceptAllFileFilterUsed(false) 生效。


0

这在Java 8.1中运行良好。

JFileChooser dbfilechooser = new JFileChooser();
FileNameExtensionFilter filter1 = 
  new FileNameExtensionFilter("xls","xls");
FileNameExtensionFilter filter2 = 
  new FileNameExtensionFilter("xlsx", "xlsx");
FileNameExtensionFilter filter3 = 
  new FileNameExtensionFilter("csv", "csv");

dbfilechooser.addChoosableFileFilter(filter1);
dbfilechooser.addChoosableFileFilter(filter2);
dbfilechooser.addChoosableFileFilter(filter3);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接