Is there a new Java 8 way of retrieving the file extension?

后端 未结 5 1929
闹比i
闹比i 2021-02-07 06:21

What I did up until now is following:

String fileName = \"file.date.txt\";
String ext = fileName.substring(fileName.lastIndexOf(\'.\') + 1);

System.out.printf(\         


        
相关标签:
5条回答
  • 2021-02-07 06:56

    Use FilenameUtils.getExtension from Apache Commons IO

    Example:

    You can provide full path name or only the file name.

    String myString1 = FilenameUtils.getExtension("helloworld.exe"); // returns "exe"
    String myString2 = FilenameUtils.getExtension("/home/abc/yey.xls"); // returns "xls"
    

    Hope this helps ..

    0 讨论(0)
  • 2021-02-07 07:00

    No there is no more efficient/convenient way in JDK, but many libraries give you ready methods for this, like Guava: Files.getFileExtension(fileName) which wraps your code in single method (with additional validation).

    0 讨论(0)
  • 2021-02-07 07:00

    Actually there is a new way of thinking about returning file extensions in Java 8.

    Most of the "old" methods described in the other answers return an empty string if there is no extension, but while this avoids NullPointerExceptions, it makes it easy to forget that not all files have an extension. By returning an Optional, you can remind yourself and others about this fact, and you can also make a distinction between file names with an empty extension (dot at the end) and files without extension (no dot in the file name)

    public static Optional<String> findExtension(String fileName) {
        int lastIndex = fileName.lastIndexOf('.');
        if (lastIndex == -1) {
            return Optional.empty();
        }
        return Optional.of(fileName.substring(lastIndex + 1));
    }
    
    0 讨论(0)
  • 2021-02-07 07:05

    No, see the changelog of the JDK8 release

    0 讨论(0)
  • 2021-02-07 07:09

    Not Java8, but you can always use FilenameUtils.getExtension() from apache Commons library. :)

    0 讨论(0)
提交回复
热议问题