[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-nio-dev
Subject: Re: RFR: 8057113: (fs) Path should have a method to obtain the filename extension [v2]
From: Alan Bateman <alanb () openjdk ! java ! net>
Date: 2021-01-31 12:42:45
Message-ID: hDqwPegKOU3l6SZsTwJUlm_I6Ump0VTH9wwzQc7oDfA=.17eadc4a-bc00-4bb3-9b8d-9117b16c32f7 () github ! com
[Download RAW message or body]
On Fri, 29 Jan 2021 23:13:55 GMT, Brian Burkhalter <bpb@openjdk.org> wrote:
> > 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
> >
> > If the specification can be agreed upon, then a test will be added to this PR and \
> > a corresponding CSR will be filed.
>
> Brian Burkhalter has updated the pull request incrementally with one additional \
> commit since the last revision:
> 8057113: Changes pursuant to PR conversation
src/java.base/share/classes/java/nio/file/Path.java line 259:
> 257: * characters, does not contain a dot, only the first character is a dot,
> 258: * or the last character is a dot.
> 259: *
Thanks for bringing this one back. The survey and the current proposal seems \
reasonable.
The spec will need cover the case that the Path doesn't have a file name (getFileName \
can return null so I assume the prototype implementation will NPE in that case). Are \
you planning to return null or the empty String for this case?
"file name string" needs to be replaced with "the String representation of the file \
name". This is significant aspect of the proposal in that it aligns the method with \
toString rather than other operations that preserve the platform representation of \
the path.
-------------
PR: https://git.openjdk.java.net/jdk/pull/2319
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic