为什么 File.getParent() returns windows 中没有斜线的路径?

Why File.getParent() returns a path without slashes in windows?

我有一个 java 程序在 linux 中运行良好,但它 returns 在 windows 中有错误的值。 我有一个 File 变量,我尝试使用 getParent() 方法检索它的父路径。 windows 中的结果是没有斜杠的路径。

...
File store = fileChooser.getSelectedFile ();  
System.out.println(store.getParent()); 
// prints C:UsersMynameDesktopTest
// expected C:/Users/Myname/Desktop/Test

有人知道这个问题的原因吗?

它returns abstract pathname http://docs.oracle.com/javase/7/docs/api/java/io/File.html#getParent()

所以将代码更改为 store.getParentFile.getPath()

What I try to is modifying a configuration file and put within it this path. I used .replaceAll() method.

那是你的问题!

String.replaceAll(regex, replacement) 的第二个参数中的任何反斜杠字符都被视为转义字符。阅读 javadoc 了解详细信息。

在你的例子中,文件分隔符退格是未知的转义,replaceAll 是 "eating" 它们。

我找到了这个问题的解决方案:

我用我用replaceAll()方法修改了一个配置文件,在第二个参数里我放了我的路径(在windows中是C:\Users\Myname\Desktop\Test)。 the Javadoc 中提到,替换字符串中的反斜杠 (\) 和美元符号 ($) 可能导致结果与将其视为文字替换字符串时的结果不同。

所以为了解决这个问题我做了:

...
content.replaceAll("root/ca", store.getParent().replaceAll("\\", "/") );

它直接适用于 linux,因为在 linux 中,默认文件分隔符是“/”。