黑客日教程-Java中获取文件扩展名的方法你又知道几种

1 介绍

本文将讨论3中方式来获取文件扩展名。
本文示例直接返回“.”后面。比如“javais.txt”返回“txt”。

2 获取扩展名

获取扩展名的时候,有两个特殊场景:

  • 当文件名没有扩展名的时候,比如 makefile。
  • 当文件名只有扩展名的时候,比如.gitignore或.DS_Store

2.1 最简单的、基于字符串处理的方法

public Optional<String> getExtensionByStringHandling(String filename) {
    return Optional.ofNullable(filename)
      .filter(f -> f.contains("."))
      .map(f -> f.substring(filename.lastIndexOf(".") + 1));
}

上面代码,通过检查“.”在文件名中的位置,把“.”之后的作为扩展名。
特殊情况:

  • 没有扩展名,返回空;
  • 只有扩展名,返回扩展名之后的,比如“gitignore”

2.2 Apache Commons IO的FilenameUtils.getExtension

代码如下:

public String getExtensionByApacheCommonLib(String filename) {
    return FilenameUtils.getExtension(filename);
}

上面代码,我们传入的filename是一个完整路径,类似:“C:/baeldung/com/demo.java”。FilenameUtils.getExtension会判断文件是否存在。
如果不存在,则原样返回filename。否则,返回文件的扩展名。
此方法调用了FilenameUtils里面的indexOfExtension(String)方法,indexOfExtension又调用了lastIndexOf(char),最终找到最后一个“.”。
还调用了indexOfLastSeparator(String)来判断最后一个“.”后面有没有目录分隔符。
特殊情况:

  • 没有扩展名:返回空字符串
  • 只有扩展名:返回“.”之后的字符串,比如“gitignore”。

2.3 使用Guava库

基于maven引入Guava:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>24.1.1-jre</version>
</dependency>

使用Files.getFileExtension方法:

public String getExtensionByGuava(String filename) {
    return Files.getFileExtension(filename);
}

getFileExtension首先会检查给定的文件名是否存在。
如果非空,会创建一个File实例,并调用File的getName()方法,得到抽象的目录名。
基于这个返回值,利用String的lastIndexOf(char)获取最后一个“.”的位置。
特殊情况:

  • 没有扩展名:返回空字符串
  • 只有扩展名:返回“.”之后的字符串,比如“gitignore”。

3 结论

Apache Commons和Google Guava各有特点,根据需要选择即可。
本文代码见github

编译

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值