Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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_Path - Fatal编程技术网

Java 将Windows样式路径转换为Unix路径

Java 将Windows样式路径转换为Unix路径,java,path,Java,Path,我想获取一个表示路径的字符串,并将其转换为绝对Unix样式的路径。此字符串可以是Windows或Unix样式,因为它是调用MainClass.class.getClassLoader().getResource(“”.getPath())的结果,根据您的系统返回不同的样式路径 (我这样做是为了编写一个游戏,其中一部分给用户一个简单的“bash-ish”shell,我希望用户能够读取文件。伪文件系统作为普通目录树存储在我项目的子目录中。该文件系统将使用Unix样式的路径,我希望能够将输入的路径与前

我想获取一个表示路径的字符串,并将其转换为绝对Unix样式的路径。此字符串可以是Windows或Unix样式,因为它是调用
MainClass.class.getClassLoader().getResource(“”.getPath()
)的结果,根据您的系统返回不同的样式路径

(我这样做是为了编写一个游戏,其中一部分给用户一个简单的“bash-ish”shell,我希望用户能够读取文件。伪文件系统作为普通目录树存储在我项目的子目录中。该文件系统将使用Unix样式的路径,我希望能够将输入的路径与前面提到的字符串连接起来(通过一些小的编辑将其放入正确的目录)因此,我可以找到文件的内容。)

你知道我该怎么做吗?我尝试了很多方法,但我似乎无法让它在我朋友的Windows7系统上正常工作


目前,我只是使用一个简单的方法来检查字符串是否以“C:\”或类似的开头,然后用斜杠替换反斜杠,但这不是一个好方法,我相信其他人以前也遇到过不同路径样式的问题。这当然是一个非常临时的解决方案。

如果您只想访问一个与某个目录具有相对名称的文件,您可以使用普通API,如下所示:

final String baseDir = MainClass.class.getClassLoader().getResource("").getPath();
final String relativeName = "audio/abc.mp3";
final File relativeFile = new File(baseDir, relativeName);
final String canonicalPath = relativeFile.getCanonicalPath();

它应该在Unix和Windows上都能工作,因为Windows同时接受Unix和Windows样式的路径(仅从我自己的经验来看)。

一般来说,我在任何操作系统上使用“/”作为分隔符都没有问题

 new File("/a/b/c.txt");
至少适用于Unix、Windows和iSeries

如果您希望正确,那么有一个常量“File.separator”,用于保存操作系统分隔符

 new File("/a/b/c.txt");
如果要替换字符串中的反斜杠“\”,请记住它是一个特殊的转义字符:

String newString = str.replace("\\","/");
编辑:

记住,字符串是不可变的

 str.replace("\\","/");

不会更改字符串,只返回带有替换字符的新字符串。

我建议显示一些代码、您正在尝试实现的内容以及您当前拥有的内容。没有代码,这个问题对我来说似乎足够合理。完全合理的问题。org.apache.commons.io.FilenameUtils.normalize(name,true)将执行所需的操作。这是一件非常合理的事情,与其解释用户为什么不应该这样做,为什么不发布答案呢?提示:使用
char
版本的
.replace()
会稍微有效率:)