RFR: 8057113: (fs) Path should have a method to obtain the filename extension [v8]
Brian Burkhalter
bpb at openjdk.java.net
Fri Mar 12 21:33:18 UTC 2021
> Please review this proposed change to add a method `java.nio.file.Path.getExtension()`. This was initially discussed in the thread http://mail.openjdk.java.net/pipermail/nio-dev/2018-February/004716.html. This method would return the filename extension of the file name of the `Path`. The extension is defined to be the portion of the file name after the last dot `(‘.’)`.
>
> The definitions of file extension for about fifteen platforms and languages were surveyed to try to find a reasonable compromise for the definition of extension. The most common definition was the last segment of the name including and after the last dot. The second definition omitted the last dot from the extension. Java-related platforms all exclude the last dot. (One divergent definition in the internal Java NIO method `AbstractFileTypeDetector.getExtension(String)` defines the extension as the part after the *first* dot.)
>
> All examined cases define the extension to be an empty string if it cannot be determined. None of these cases used `null` to represent an indeterminate extension.
>
> Little in the way of specifying behavior for special cases (consisting mainly of file names with one or more leading dots) was found. Most definitions concern themselves only with the last dot and what comes after it and ignore leading dots altogether. A few definitions ignore a leading dot at the zeroth character. The current proposal ignores a dot at character zero.
>
> The behavior of the proposed method for some example cases is as:
>
> . ->
> .. ->
> .a.b -> b
> ...... ->
> .....a -> a
> ....a.b -> b
> ..foo -> foo
> test.rb -> rb
> a/b/d/test.rb -> rb
> .a/b/d/test.rb -> rb
> foo. ->
> test ->
> .profile ->
> .profile.sh -> sh
> ..foo -> foo
> .....foo -> foo
> .vimrc ->
> test. ->
> test.. ->
> test... ->
> foo.tar.gz -> gz
> foo.bar. ->
> image.jpg -> jpg
> music.mp3 -> mp3
> video.mp4 -> mp4
> document.txt -> txt
> foo.tar.gz -> gz
> foo.bar. ->
Brian Burkhalter has updated the pull request incrementally with one additional commit since the last revision:
8057113: Change first sentence; change param name
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/2319/files
- new: https://git.openjdk.java.net/jdk/pull/2319/files/0c864bd2..e380d09e
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=2319&range=07
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=2319&range=06-07
Stats: 15 lines in 1 file changed: 0 ins; 1 del; 14 mod
Patch: https://git.openjdk.java.net/jdk/pull/2319.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/2319/head:pull/2319
PR: https://git.openjdk.java.net/jdk/pull/2319
More information about the nio-dev
mailing list