JDK 1.8.0_66, diacritics and file problems, follow up

Alan Bateman Alan.Bateman at oracle.com
Thu May 12 12:41:04 UTC 2016


On 12/05/2016 13:11, Fabrizio Giudici wrote:
> :
>
> The Paths submitted to the test are discovered by Files.walk().
>
> What I'm seeing is that all the troubled files show now no access 
> problems with NIO, while IO fails (e.g. toFile().exists() returns 
> false while Files.exists(path) returns true).
>
> :
>
>
> The following code thus can be used to probe a troubled Path (so far I 
> see that the problem only happens with the EXT4 filesytem; no problems 
> with e.g. BTRFS and HFS+):
>
>     private static boolean isTroubled (final @Nonnull Path path)
>       {
>         return Files.exists(path) != path.toFile().exists();
>       }
>
> I was able to implement a first workaround for libraries I'm using 
> that unfortunately are based on java.io.File: I create a temporary 
> symbolic link without diacritics, use it in place of the original, 
> then delete it after the processing, and it works.
I assume is a decoding and encoding round trip issue, meaning bytes -> 
String -> bytes. When you use the new file system API then you are using 
a Path which will use the underlying representation to access the file. 
Once you call toString or switch to java.io.File the bytes are decoded, 
and then re-encoded when you access the file via File::exists. Yes, all 
very subtle.

So you can summarize the environment? You mention HFS+ and there is a 
mention about use NFD normalization. There is also a mention of a 
Raspberry Pi. So are the files transferred between the systems or is 
there SAMBA or other network access in the picture.

-Alan.



More information about the core-libs-dev mailing list