Может кто-нибудь объяснить, что я делаю неправильно и/или что здесь не хватает. У меня есть объекты java.nio.file.Path, которые отлично работают в моем Java-приложении. Единственная проблема заключается в том, что я пытаюсь распечатать их в журналах, и эта проблема присутствует только в Windows. Когда я преобразую объект Path в строку (или объект File), я получаю некоторый путь, например build/somefile.txt в Linux, Unix, Mac, но в Windows он печатается как buildsomefile.txt . Я ожидал увидеть build\\somefile.txt, но вместо этого в Windows косые черты опущены.
Это простой пример кода, который я выполнил на Mac, Ubuntu и Windows с Java 11 и Java 17:
Код: Выделить всё
import java.nio.file.Paths;
System.out.println(Paths.get("build", "somefile.txt"));
System.out.println(Paths.get("build", "somefile.txt").toFile());
System.out.println(Paths.get("build", "somefile.txt").toFile().getPath());
То же самое поведение, если я нормализую путь, преобразую его в абсолютный путь и т. д. Из документации Path мне кажется, что toString() должен используйте здесь File.separator, и именно такое поведение я наблюдаю в системах, отличных от Windows. В документах также указано, что разделитель Windows равен \\. Может ли кто-нибудь помочь мне понять, чего мне здесь не хватает? Спасибо!
РЕДАКТИРОВАТЬ:
Все они также выводят пустые строки:
Код: Выделить всё
import java.nio.file.File;
System.out.println(File.separator);
System.out.println(File.separatorChar);
Следует отметить, что я вижу это в тестах, если это актуально.
Подробнее здесь:
https://stackoverflow.com/questions/771 ... -file-path