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

标签: java string if-statement


【解决方案1】:

关注

extension != excel

应该是

!excel.equals(extension)

!excel.equalsIgnoreCase(extension)

另请参阅

【讨论】:

  • +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
      

      【讨论】:

      • 请提供更多细节。
      • 我的例子展示了检查文件扩展名的简单方法。我的意思是您需要获取文件名并检查该字符串末尾是否需要符号
      猜你喜欢
      • 2013-05-03
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多