【问题标题】:Get file name from a file location in Java从Java中的文件位置获取文件名
【发布时间】:2010-11-03 22:06:12
【问题描述】:

我有一个String,它提供了文件的绝对路径(包括文件名)。我只想获取文件名。最简单的方法是什么?

它需要尽可能通用,因为我无法提前知道 URL 是什么。我不能简单地创建一个 URL 对象并使用 getFile()——尽管如果可能的话,那将是理想的——因为它不一定是 http:// 前缀,它可能是 c:/ 或类似的东西。

【问题讨论】:

    标签: java url string path filenames


    【解决方案1】:
    new File(fileName).getName();
    

    int idx = fileName.replaceAll("\\\\", "/").lastIndexOf("/");
    return idx >= 0 ? fileName.substring(idx + 1) : fileName;
    

    请注意,第一个解决方案取决于系统。它只考虑系统的路径分隔符。因此,如果您的代码在 Unix 系统上运行并接收 Windows 路径,它将无法工作。处理由 Internet Explorer 发送的文件上传时就是这种情况。

    【讨论】:

    • 第一个 replaceAll 参数是错误的,因为斜杠在 Java 字符串和正则表达式中都是转义字符。它应该是 fileName.replaceAll("\\\\", "/")...
    • 另外,尽管 subString 不应该是驼峰大小写并且应该是“substring”全部小写以达到本机 String API 的 substring 方法,但它是如何被多次接受的,除非您使用其他东西在这里,但可能应该注意这一点。
    • 我发现第一个选项 (new File(filename).getName()) 在所有实现中都不起作用。我发现在 Windows 上运行的 java 与在 Linux 上运行的 java 之间存在差异。具体来说,Linux 实现将 \ 作为文件名的一部分,并且没有将其视为分隔符。如果您想要跨平台实现,则第二种选择更安全。
    • 这个答案怎么能被接受这么多次,当没有人同意它有多好(/坏?)时......虽然使用 Commons IO 的一个伟大的班轮可用于其他两个答案? @kd304,正如您所建议的“项目截止日期教您快速打字”,但是您输入的越少,您的速度就越快! FilenameUtils.getName(path) 是最简单/最快/最好的方法...
    【解决方案2】:
    new File(absolutePath).getName();
    

    【讨论】:

      【解决方案3】:

      Apache Commons IO 提供了 FilenameUtils 类,它为您提供了一组非常丰富的实用函数,可以轻松获取文件名的各个组成部分,尽管 java.io.File 类提供了基础知识。

      【讨论】:

      • 始终使用它。不能抱怨。
      【解决方案4】:

      来自Apache Commons IO FileNameUtils

      String fileName = FilenameUtils.getName(stringNameWithPath);
      

      【讨论】:

        【解决方案5】:

        这里有 2 种方式(两者都独立于操作系统。)

        使用 Paths :从 1.7 开始

        Path p = Paths.get(<Absolute Path of Linux/Windows system>);
        String fileName = p.getFileName().toString();
        String directory = p.getParent().toString();
        

        在 Apache Commons IO 中使用 FilenameUtils

        String name1 = FilenameUtils.getName("/ab/cd/xyz.txt");
        String name2 = FilenameUtils.getName("c:\\ab\\cd\\xyz.txt");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多