Hello,

one of key Java principles is "write once - run everywhere".
It seems to me that this code breaks this rule
------------------------------------

import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;

public class Main {
  public static void main(String[] args) throws IOException {
    String path = Main.class
            .getClassLoader()
            .getResource("tsypanov/example/war-and-peace.json")
            .getPath();
    List<String> lines = Files.readAllLines(Path.of(path));
    assert lines.size() == 1;
  }
}

------------------------------------

This code work under *nix (tested on MacOS and Linux Mint) 
and fails on Windows 10 with exception:

Exception in thread "main" java.nio.file.InvalidPathException:
Illegal char <:> at index 2: 
/C:/Users/sergii_tsypanov/IdeaProjects/jdk-bug/out/production/jdk-bug/tsypanov/example/war-and-peace.json
        at 
java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
        at 
java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
        at 
java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
        at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
        at 
java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:229)
        at java.base/java.nio.file.Path.of(Path.java:147)
        at tsypanov.example.Main.main(Main.java:15)


As far as I use a relative path in my Java code 
I expect this to have same behaviour on all supported platforms.

This was reproduced on JDK 12.

I've prepared a test project on GitHub to reproduce this in IDEA:

 https://github.com/stsypanov/jdk-bug

Regards,
Sergey Tsypanov

Reply via email to