FilenameUtils.getExtension 比较 returns 错误

FilenameUtils.getExtension comparison returns false

我对这种与 FilenameUtils.getExtension 的比较感到很困惑。

我有一个文件选择器 fc,我想确保扩展名是 .csv

JFileChooser fc = new JFileChooser();
if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION &&
    fc.getSelectedFile().isFile() &&
    FilenameUtils.getExtension(fc.getSelectedFile().getName()) == "csv") {
    // Do stuff
}

经过一些调试,我发现是最后一条语句导致if语句没有执行。

FilenameUtils.getExtension(fc.getSelectedFile().getName()) == "csv"

但是我做了很多 System.out.println() 并且得到了

System.out.println(FilenameUtils.getExtension(fc.getSelectedFile().getName()));

打印 csv。但是当我输入时仍然 returns false:

System.out.println(FilenameUtils.getExtension(fc.getSelectedFile().getName()) == "csv");

您不能将字符串的内容与==进行比较。您必须为此使用 equals(...) 方法:

System.out.println(FilenameUtils.getExtension(fc.getSelectedFile().getName()).equals("csv"));

您面临的问题是众所周知的问题。您正在尝试将字符串与 == 运算符进行比较。而不是你应该使用 equals-function of String.

你这两种方式有点区别: 如果你愿意,你可以阅读这个 question 并找到答案以了解两者之间的区别。

应用于该代码应该如下所示:

System.out.println(FilenameUtils.getExtension(fc.getSelectedFile().getName()).equals("csv"));

希望对您有所帮助!