Преобразование пути в стиле Windows в путь Unix в коде Java

Я работаю в Java-коде, который был разработан для работы в Windows и содержит много ссылок на файлы с использованием путей в стиле Windows "System.getProperty("user.dir")\trash\blah". Я отвечаю за его адаптацию и развертывание в Linux. Есть ли эффективный способ преобразовать все эти пути (\) в стиль Unix (/), как в "System.getProperty("user.dir")/trash/blah". Может быть, некоторая конфигурация в Java или Linux для использования \ как /.

3 ответа

Мой подход заключается в использовании объекта Path для хранения информации о пути, обработки конкатенации и относительного пути. Затем вызовите метод toString() Path, чтобы получить путь String.

Для преобразования разделителя пути я предпочел использовать FilenameUtils общей библиотеки iache apache. Он предоставляет три функции usefule:

String  separatorsToSystem(String path);
String  separatorsToUnix(String path);
String  separatorsToWindows(String path)

Пожалуйста, посмотрите фрагмент кода, для относительного пути, toString и изменений разделителя:

private String getRelativePathString(String volume, Path path) {
  Path volumePath = Paths.get(configuration.getPathForVolume(volume));
  Path relativePath = volumePath.relativize(path);
  return FilenameUtils.separatorsToUnix(relativePath.toString());
}

Я перечитал ваш вопрос и понял, что вам, вероятно, не нужна помощь в написании путей. За то, что вы пытаетесь сделать, я не могу найти решение. Когда я недавно сделал это в проекте, мне потребовалось время, чтобы преобразовать все пути. Кроме того, я сделал предположение, что обработка "user.home" в качестве корневого каталога была относительно уверенной, что включала бы доступ на запись для этого пользователя, выполняющего мое приложение. В любом случае, вот некоторые проблемы пути, которые я рассмотрел.

Я переписал оригинальный код Windows так:

String windowsPath = "C:\temp\directory"; //no permission or non-existing in osx or linux
String otherWindowsPath = System.getProperty("user.home") + "\Documents\AppFolder";
String multiPlatformPath = System.getProperty("user.home") + File.separator + "Documents" + File.separator + "AppFolder";

Если вы собираетесь делать это в разных местах, возможно, напишите служебный класс и переопределите метод toString(), чтобы снова и снова указывать путь к unix.

String otherWindowsPath = System.getProperty("user.home") + "\Documents\AppFolder";
otherWindowsPath.replace("\\", File.separator);

Напишите сценарий, замените все символы "\\" на одну косую черту, которую Java преобразует в соответствующий путь ОС.

Другие вопросы по тегам