2

我只想选择带有FileChooser的.CSV文件,但是当Chooser打开时,我会看到所有扩展名。我需要设置更多的东西吗?

        btnFile.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e){
                        chooser = new JFileChooser(); 
                        chooser.setCurrentDirectory(new java.io.File("."));
                        chooser.setDialogTitle("Choose Value File");
                        chooser.addChoosableFileFilter(new CSVFilter());

                        if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { 
                          System.out.println("getCurrentDirectory(): " 
                             +  chooser.getCurrentDirectory());
                          System.out.println("getSelectedFile() : " 
                             +  chooser.getSelectedFile());
                          }
                        else {
                          System.out.println("No Selection ");
                          }

            }
        });

并且过滤器是嵌套类

class CSVFilter extends javax.swing.filechooser.FileFilter {
      public boolean accept(File f) {

        return f.isFile() || f.getName().toLowerCase().endsWith(".csv");
      }

      public String getDescription() {
        return "*.csv";
      }
    }
4

8 回答 8

6

也许应该是:

    return f.isFile() && f.getName().toLowerCase().endsWith(".csv");

不是:

    return f.isFile() || f.getName().toLowerCase().endsWith(".csv");
于 2011-08-16T09:28:45.243 回答
2

逻辑是错误的。它应该是

return f.isFile() && f.getName().toLowerCase().endsWith(".csv");

目前您正在接受任何文件。

于 2011-08-16T09:29:32.657 回答
2

您需要一个FileFilter用于从视图中过滤掉文件。ChoosableFileFilter不要从视图中隐藏文件,只是避免选择它们。看看JFileChooser#setFileFilter(javax.swing.filechooser.FileFilter)

于 2011-08-16T09:29:36.193 回答
2

它应该是:

@Override
public boolean accept(File f) {
    return (f.isFile() && f.getName().toLowerCase().endsWith(".csv")) || f.isDirectory();
}

它也尊重目录。

于 2012-08-28T12:19:05.153 回答
1

问题可能出在这一行:

return f.isFile() || f.getName().toLowerCase().endsWith(".csv");

f如果 File是文件,则无论它是否为 .csv 文件,这将返回 true 。

您可能需要 AND (&&) 条件而不是 OR (||) 条件。你想接受任何文件,它是一个文件,它的扩展名是 .csv。

于 2011-08-16T09:28:31.967 回答
1

尝试这样做:

 public boolean accept(File file) {

        return file.isDirectory() || file.getAbsolutePath().endsWith(".csv");
}
于 2013-04-04T15:06:12.043 回答
0

在您的 CSVFilter 中,您有一个名为 accept 的方法,TRUE如果输入参数为file OR csv file.

它总是会返回TRUE一个有效的文件参数。

条件应该是

...
if (f.isFile() && f.isCSVFile())
...
于 2011-08-16T09:32:34.440 回答
0

您需要实际设置文件过滤器,而不仅仅是将其添加为可选过滤器

chooser.setFileFilter(new CSVFilter());
于 2011-08-16T11:50:10.330 回答