在 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)
另请参阅
Stringequals()
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 中检查文件扩展名的主要内容,如果未能解决你的问题,请参考以下文章