Определите, являются ли `.` и` ..` «специальными именами» в файловой системе Java - PullRequest
2 голосов
/ 24 марта 2020

Я привык думать, что . и .. - это всегда имен файлов с особым значением. Но некоторые Java 11 API, такие как Path.normalize(), указывают, что это верно только для некоторых реализаций файловой системы:

Во многих файловых системах "." и ".." - это специальные имена, используемые для обозначения текущего каталога и родительского каталога.

Если . и .. являются "специальными именами" только в некоторых файловых системах, как я могу сделать запрос файловая система, чтобы знать, являются ли эти имена специальными для этой FileSystem реализации?

1 Ответ

2 голосов
/ 24 марта 2020

Не существует спецификации, которая требует реализации FileSystem для предоставления вам этой информации.

Так что даже если некоторые FileSystem дадут вам эту информацию, вы не можете быть уверены, если вы не имеют дело с файловой системой, которая не предоставляет вам эту информацию.

Если вы действительно заботитесь об этой информации и нуждаетесь в ней для правильной работы вашего кода, то единственный вариант - что-то вроде

Map<String, Object> env = new HashMap<>();
FileSystem f = FileSystems.newFileSystem(new URI("rw:///"), env);

boolean equalsDoesntNormalize = !f.getPath("a/./b").equals(f.getPath("a/b"));
boolean equalAfterNormalize = f.getPath("a/./b").normalize().equals(f.getPath("a/b"));
boolean dotIsSpecial = equalAfterNormalize && !equalsDoesntNormalize;

Но, если честно: я не думаю, что вам нужна эта информация ...

...