Изучая поведение API NIO2, я рассмотрел это:
Path unix = Paths.get("/");
Path windows = Paths.get("c:\\");
System.out.println(unix.getNameCount());
System.out.println(windows.getNameCount());
... дает результат
0
1
Почему это? Я ожидал бы тот же результат, который должен быть фактически 0
потому что нет имени, а только корень. Когда я добавляю папку
Path unix = Paths.get("/etc");
Path windows = Paths.get("c:\\etc");
System.out.println(unix.getNameCount());
System.out.println(windows.getNameCount());
... тогда я получаю
1
1
Разве это не странно для части Windows?
Редактировать: Я сам на машине Linux.
Хорошо, теперь я нашел правильное объяснение:
Экземпляр Path отражает базовую платформу. В ОС Solaris Path использует синтаксис Solaris (/home/joe/foo), а в Microsoft Windows Path использует синтаксис Windows (C:\home\joe\foo). Путь не зависит от системы.
Отсюда: http://docs.oracle.com/javase/tutorial/essential/io/pathClass.html
Это означает, что в моем случае на машине linux путь "c:\\\\"
будет именем относительной папки в моем рабочем каталоге.
System.out.println(Paths.get("c:\\").getNameCount());
печатает 0 на моей машине Windows ...