Java获取文件扩展名方法,(或选择以下任一精简版),Java文件扩展名判断技巧,Java快速获取文件扩展名,Java判断文件后缀方法,Java文件类型识别实战,3种Java获取扩展名方法

在Java中判断文件扩展名,通常通过获取文件名后使用lastIndexOf('.')定位最后一个点,然后截取其后字符串,需处理无扩展名或点位于末尾的情况,确保准确提取扩展名部分。

方法1:使用 String.substring()lastIndexOf()(原生Java)

原理:通过截取最后一个之后的字符串获取扩展名。
代码示例

Java获取文件扩展名方法,(或选择以下任一精简版),Java文件扩展名判断技巧,Java快速获取文件扩展名,Java判断文件后缀方法,Java文件类型识别实战,3种Java获取扩展名方法

public static String getFileExtension(String fileName) {
    if (fileName == null || fileName.lastIndexOf(".") == -1) {
        return ""; // 无扩展名或文件名无效
    }
    return fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
}
// 调用示例
String fileName = "report.pdf";
String extension = getFileExtension(fileName); // 返回 "pdf"

优点:无需外部依赖,执行效率高。
缺点

  • 无法处理 .tar.gz 等多级扩展名。
  • 文件名含特殊路径时(如 ../file.txt)可能出错,需先提取纯文件名。

方法2:使用 java.nio.file.Path(Java 7+ 推荐)

原理:通过NIO的Path对象解析文件名和扩展名,避免路径干扰。
代码示例

import java.nio.file.Paths;
import java.nio.file.Path;
public static String getExtensionByNio(String filePath) {
    Path path = Paths.get(filePath);
    String fileName = path.getFileName().toString(); // 提取纯文件名
    int dotIndex = fileName.lastIndexOf(".");
    return (dotIndex == -1) ? "" : fileName.substring(dotIndex + 1).toLowerCase();
}
// 调用示例
String path = "/user/docs/archive.zip";
String ext = getExtensionByNio(path); // 返回 "zip"

优点:自动处理路径分隔符,兼容不同操作系统。
缺点:仍无法解决多级扩展名问题。


方法3:使用 Apache Commons IO 库

原理:通过FilenameUtils.getExtension()方法直接获取扩展名,简化逻辑。
步骤

Java获取文件扩展名方法,(或选择以下任一精简版),Java文件扩展名判断技巧,Java快速获取文件扩展名,Java判断文件后缀方法,Java文件类型识别实战,3种Java获取扩展名方法

  1. 添加Maven依赖:

    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.11.0</version>
    </dependency>
  2. 代码实现:

    import org.apache.commons.io.FilenameUtils;
    public static String getExtensionByCommons(String fileName) {
        return FilenameUtils.getExtension(fileName).toLowerCase();
    }
    // 调用示例
    String fileName = "image.JPEG";
    String ext = getExtensionByCommons(fileName); // 返回 "jpeg"

    优点

  • 自动处理路径和大小写(如.JPEGjpeg)。
  • 支持复杂文件名(如C:dirfile.name.with.dots.txt)。
    缺点:需引入第三方库。

关键安全注意事项

  1. 扩展名不可信
    用户可能伪造扩展名(如将恶意脚本重命名为image.jpg.exe),仅依赖扩展名会引发安全风险。
  2. 解决方案
    • 校验文件内容:通过Files.probeContentType()(Java 7+)检测MIME类型:
      Path path = Paths.get("user_file.tmp");
      String mimeType = Files.probeContentType(path); // 返回 "image/jpeg"
    • 结合扩展名和内容:双重验证确保文件真实类型。

总结建议

场景 推荐方法
简单项目(无外部依赖) String.substring() + 路径清洗
Java 7+ 项目 java.nio.file.Path
复杂路径/企业级应用 Apache Commons IO
高安全性要求 扩展名 + MIME类型双重校验

最佳实践

Java获取文件扩展名方法,(或选择以下任一精简版),Java文件扩展名判断技巧,Java快速获取文件扩展名,Java判断文件后缀方法,Java文件类型识别实战,3种Java获取扩展名方法

  • 始终将扩展名转换为小写(.toLowerCase())避免大小写敏感问题。
  • 对上传文件使用白名单机制(如只允许.pdf, .jpg)。
  • 敏感操作(如执行文件)必须校验内容而非仅依赖扩展名。

引用说明

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/32902.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月20日 23:32
下一篇 2025年6月12日 15:24

相关推荐

  • 如何运行Java源码文件

    安装JDK后,打开命令行,进入源码目录,使用javac 文件名.java命令编译源代码生成.class文件,再用java 主类名命令运行编译好的程序。

    2025年6月1日
    300
  • Java面试如何准备?

    Java面试需扎实掌握核心语法、集合、多线程等基础,重点考察项目经验与实际问题解决能力,算法题常考数据结构与逻辑思维,同时重视沟通表达和持续学习态度,准备时要结合理论实践,清晰阐述技术选型与优化思路。

    2025年6月15日
    000
  • Java如何获取输入框数字

    在Java中,使用Scanner类读取控制台输入的文本数字,或通过图形界面组件(如JTextField)获取输入后,调用Integer.parseInt()或Double.parseDouble()方法将字符串转换为数字类型,需捕获NumberFormatException处理非法输入。

    2025年5月31日
    500
  • Java按钮快捷键如何设置?

    在Java中为按钮设置快捷键,可通过setMnemonic()方法实现,button.setMnemonic(KeyEvent.VK_A)将快捷键设为Alt+A,按钮文本需包含对应字符(如”A”),系统会自动添加下划线提示,此方法适用于Swing组件如JButton。

    2025年6月11日
    000
  • Java空心三角形怎么打印

    使用循环控制行数和空格数,第一行打印一个星号,中间行打印两个星号(中间用空格隔开),最后一行打印连续星号,形成空心三角形,核心代码:,“`java,int n = 5; // 行数,for (int i = 1; i

    2025年6月17日
    100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN