Java 如何在FileDialog中筛选文件类型?

Java 如何在FileDialog中筛选文件类型?,java,filedialog,Java,Filedialog,我使用FileDialog在Java程序中保存和加载 如何过滤下拉列表以指定文件类型为“JPG”或“JPEG”等 我尝试了以下代码,但似乎没有效果 还有其他的方法吗 public void actionPerformed(ActionEvent e) { FileDialog saveFileDialog = new FileDialog(new Frame(), "Save", FileDialog.SAVE); saveFileDialog.

我使用FileDialog在Java程序中保存和加载

如何过滤下拉列表以指定文件类型为“JPG”或“JPEG”等

我尝试了以下代码,但似乎没有效果

还有其他的方法吗

public void actionPerformed(ActionEvent e) {
            FileDialog saveFileDialog = new FileDialog(new Frame(), "Save", FileDialog.SAVE);

            saveFileDialog.setFilenameFilter(new FilenameFilter(){
                @Override
                public boolean accept(File dir, String name) {
                    return name.endsWith(".jpg") || name.endsWith(".jpeg");
                }
            });
            saveFileDialog.setFile("Untitled.jpg");
            saveFileDialog.setVisible(true);
        }

这对我也不管用

相反,您可以尝试下面的代码。您还应该删除
setFilenameFilter
部分:

saveFileDialog.setFile("*.jpg");

我一直使用JFileChooser而不是FileDialog。然后,您可以通过以下方式为程序支持的各种类型添加多个可选择的文件过滤器:

File myFilename;
chooser = new JFileChooser();
chooser.addChoosableFileFilter(new OpenFileFilter("jpeg","Photo in JPEG format") );
chooser.addChoosableFileFilter(new OpenFileFilter("jpg","Photo in JPEG format") );
chooser.addChoosableFileFilter(new OpenFileFilter("png","PNG image") );
chooser.addChoosableFileFilter(new OpenFileFilter("svg","Scalable Vector Graphic") );
int returnVal = chooser.showSaveDialog(mainWindow);
if (returnVal == JFileChooser.APPROVE_OPTION) {
     myFilename = chooser.getSelectedFile();
     //do something with the file
}
下面是我对文件过滤器的实现

/**
 * This class defines which file types are displayed (by default) by the JFileChooser and what file
 * types appear in the drop down menu in the file dialog.
 * You could add more than one file type to the open file dialog by creating multiple instances of this 
 * class and then repeatedly calling addFileFilter.
 * @author LaSpina
 */

import java.io.File;
import javax.swing.filechooser.*;

public class OpenFileFilter extends FileFilter {

    String description = "";
    String fileExt = "";

    public OpenFileFilter(String extension) {
        fileExt = extension;
    }

    public OpenFileFilter(String extension, String typeDescription) {
        fileExt = extension;
        this.description = typeDescription;
    }

    @Override
    public boolean accept(File f) {
        if (f.isDirectory())
            return true;
        return (f.getName().toLowerCase().endsWith(fileExt));
    }

    @Override
    public String getDescription() {
        return description;
    }
}

答案很简单。你可以用

 saveFileDialog.setFile("*.jpg;*.jpeg");
无需使用
setFilenameFilter
方法。您可以添加任意数量的文件类型

解决这个问题的方法可以在huxhorn的评论中找到


从Java 8开始,可以使用Lambda表达式:


fileDialog.setFilenameFilter((文件目录,字符串名称)->name.endsWith(“.html”)

它只设置文件的默认保存名称,但不会更改下拉列表…是,但它可以工作,因为它不允许您查看具有其他扩展名的文件。我想要的是,是否有其他方法可以指定下拉列表的内容?“文件名筛选器在Sun针对Microsoft Windows的参考实现中不起作用”。请看ok…我已经决定使用这种方法…非常感谢~您是否应该在
OpenFileFilter
构造函数的扩展参数中包含句点,以便
file.notJpg
不被接受?是的,我应该这样做。谢谢。看来一个人最多只能使用两种类型的字符串。尝试使用5,getFile在选择后会返回错误信息。根据SO帖子,我抱怨的是JDK 7中的一个错误。
public void actionPerformed(ActionEvent e) {
            FileDialog saveFileDialog = new FileDialog(new Frame(), "Save", FileDialog.SAVE);
            saveFileDialog.setFile("*.jpg;*.jpeg");
            saveFileDialog.setVisible(true);
        }