Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java代码中将Windows样式的路径转换为unix路径_Java_Linux_Windows_Path_Path Separator - Fatal编程技术网

在java代码中将Windows样式的路径转换为unix路径

在java代码中将Windows样式的路径转换为unix路径,java,linux,windows,path,path-separator,Java,Linux,Windows,Path,Path Separator,我正在使用一个java代码,该代码设计为在windows上运行,并包含大量使用windows样式路径“System.getProperty(“user.dir”)\trash\blah”的文件引用。我负责调整它并在linux中部署。是否有一种有效的方法将所有这些路径(\)转换为unix样式(/),如“System.getProperty(“user.dir”)/trash/blah”中所述。也许,在java或linux中使用\as/的一些配置,我重新阅读了您的问题,意识到您可能不需要帮助编写路径

我正在使用一个java代码,该代码设计为在windows上运行,并包含大量使用windows样式路径“System.getProperty(“user.dir”)\trash\blah”的文件引用。我负责调整它并在linux中部署。是否有一种有效的方法将所有这些路径(\)转换为unix样式(/),如“System.getProperty(“user.dir”)/trash/blah”中所述。也许,在java或linux中使用\as/

的一些配置,我重新阅读了您的问题,意识到您可能不需要帮助编写路径。对于你想做的事,我找不到解决办法。当我最近在一个项目中这样做时,我不得不花时间转换所有路径。此外,我还假设将“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会将其转换为受尊重的OS路径。

我的方法是使用path对象保存路径信息,处理连接和相对路径。然后,调用Path的toString()以获取路径字符串

为了转换路径分隔符,我更喜欢使用apache公共io库的FilenameUtils。它提供了三个有用的功能:

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());
}