在 Java 中检查文件扩展名

Posted

技术标签:

【中文标题】在 Java 中检查文件扩展名【英文标题】:Check file extension in Java 【发布时间】:2012-06-11 07:19:42 【问题描述】:

我必须将数据从 Excel 文件导入数据库,为此,我想检查所选文件的扩展名。

这是我的代码:

String filename = file.getName();
String extension = filename.substring(filename.lastIndexOf(".") + 1, filename.length());

String excel = "xls";
if (extension != excel) 
    JOptionPane.showMessageDialog(null, "Choose an excel file!");

else 
    String filepath = file.getAbsolutePath();
    JOptionPane.showMessageDialog(null, filepath);
    String upload = UploadPoData.initialize(null, filepath);

    if (upload == "OK") 
        JOptionPane.showMessageDialog(null, "Upload Successful!");
    

但我总是得到:

选择一个excel文件!

我找不到我的代码有什么问题,请有人帮忙。

【问题讨论】:

extension 变量得到什么值?关于字符串比较的好问题:***.com/questions/513832/… 作为一个经验法则,当您要检查字符串之间的相等性时使用equalsIgnoreCase()(假设您确实想忽略大小写)。 哎呀!当遇到没有任何点/句点的文件名时,此代码将抛出 StringIndexOutOfBoundsException 使用 != 比较字符串的愚蠢代码,但无论如何文件扩展名检查代码都有帮助 【参考方案1】:

关注

extension != excel

应该是

!excel.equals(extension)

!excel.equalsIgnoreCase(extension)

另请参阅

String equals() versus ==

【讨论】:

+1 其实应该是!excel.equalsCaseIgnore(extension) ;) @peter 是的在答案中添加了它 啊哈。漂亮的陷阱彼得,小心放置。它实际上是 equalsIgnoreCase() 而不是 equalsCaseIgnore。 @JigarJoshi 不,它不是“或 equalsIgnoreCase”,它真的应该equalsIgnoreCase 而不是 equals【参考方案2】:

在您的情况下使用 equals() 方法而不是 != 符号。我的意思是写

if (!(extension.equals(excel)))..........

【讨论】:

谢谢哥们。我对Java有点陌生,所以你能给我解释一下吗?我使用 e.getActionCommand() == "ApproveSelection" 来检查是否在 FileChooser 中单击了“打开”按钮并且它正在工作。有什么区别? @Joe88 简而言之 == 将检查引用,但 equals() 检查内容。你可以得到很多关于这个概念的文章。所以谷歌它以了解更多信息。 @Joe88 一般来说,对于 JVM,"ApproveSelection" 是一个常量,因此使用相同的 "ApproveSelection" 构造的 ActionCommand 将在内部指向相同的内存。【参考方案3】:

使用

excel.equals(extension)

or

excel.equalsIgnoreCase(extension)

【讨论】:

【参考方案4】:
if (extension != excel)
   JOptionPane.showMessageDialog(null, "Choose an excel file!");


应该用作

if (!extension.equals(excel))
   JOptionPane.showMessageDialog(null, "Choose an excel file!");


 if (upload == "OK") 
 JOptionPane.showMessageDialog(null,"Upload Successful!");

作为

 if ("OK".equals(upload)) 
 JOptionPane.showMessageDialog(null,"Upload Successful!");

【讨论】:

-1 表示错误代码。你真的想在常量上执行equals,而不是在变量上,因为你的变量可以是null。所以"OK".equalsIgnoreCase(upload) 总是比其他方式更好。 @maksimov :更新了答案。 谢谢,但与我上面所说的相比,您的更新没有任何改进。【参考方案5】:

== 测试引用相等。对于值相等测试,使用.equals。如果您希望在相等性测试期间忽略大小写,请使用 String#equalsIgnoreCase

另一件事:不要重新发明***,除非它严重损坏。在您的情况下,您应该使用 Apache Commons 的 FilenameUtils#isExtension 来检查扩展名。

【讨论】:

他可能出于某种原因需要减少依赖关系,他/她想做的事情是如此简单,以至于我实际上不建议为此添加依赖关系。 @posdef,对。至少他应该用一个单独的方法把它分解出来。 @posdef,顺便说一下,如果您查看FilenameUtils#isExtension 的来源,您会发现任务并不像看起来那么简单。 诚然,一旦您着手寻找涵盖所有可能选项的通用解决方案,即使是最简单的任务也会变得复杂。并不意味着 OP 需要那么多精心设计的解决方案。 :) @posdef 除非他想让它防弹。在这种情况下,他肯定需要一个精心设计的解决方案。【参考方案6】:

您可以使用 Apache Commons Api 检查文件扩展名

String filename = file.getName();
if(!FilenameUtils.isExtension(filename,"xls"))
  JOptionPane.showMessageDialog(null, "Choose an excel file!");

http://commons.apache.org/io/api-release/index.html?org/apache/commons/io/package-summary.html

【讨论】:

【参考方案7】:

怎么样

if (filename.endsWith("xls")
    <blah blah blah>

?

【讨论】:

这会匹配我名为fooxls 的文件吗? foo.barxls 怎么样?【参考方案8】:

在我的程序中我做到了

if(file_name.endsWith(".xls") || file_name.endsWith(".xlsx"))
   // something works with file

【讨论】:

请提供更多细节。 我的例子展示了检查文件扩展名的简单方法。我的意思是您需要获取文件名并检查该字符串末尾是否需要符号

以上是关于在 Java 中检查文件扩展名的主要内容,如果未能解决你的问题,请参考以下文章

使用JAVA如何对图片进行格式检查以及安全检查处理

在java中确定文件的实际内容类型[重复]

如何在不检查路径扩展名的情况下检查文件是不是为图像文件?

在objective-c中检查文件扩展名

在 Java 中提取存档文件 [关闭]

使用 Java 在文件夹中查找文件