Преобразование пути в стиле 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 преобразует в соответствующий путь ОС.