我正在寻找(分别)在与我的程序不同的目录中写入和读取文本文件。当我指定要写入或读取的目录时,我应该使用正斜杠还是反斜杠来标识文件路径?
4 回答
使用正斜杠将使其独立于系统。为简单起见,我会坚持这一点。
java.io.File.separator
如果您曾经向用户显示路径,请考虑使用。您不想让那些 Windows 用户感到惊讶。他们是一个神经质的人。
我从未在任何地方找到它的文档,但 JDK 类允许您使用斜杠,无论您是否在 Windows 上。(您可以在 JDK 源代码中看到这一点,它为您显式转换路径分隔符。)
正式地——当然在你正在做的任何 UI 中——你应该使用file.separator
系统属性,它可以通过System.getProperty
(标准系统属性的列表记录在文档中System.getProperties
):
String sep = System.getProperty("file.separator");
...并且还通过static
字段它们也可用作File.separator
(和File.separatorChar
)。
您还可以使用类的java.io.File
各种功能来组合和拆分路径,和/或java.nio.file
.
你可以使用任何一个。
如果你使用/
,那么你只需要一个斜杠。
如果使用\
,则需要使用\\
。也就是说,你需要逃避它。
您也可以使用类的resolve()
方法java.nio.Path
将目录/文件添加到现有路径。这避免了使用正斜杠或反斜杠的麻烦。然后,您可以通过调用toAbsolutePath()
后面的方法来获取绝对路径toString()
SSCCE:
import java.nio.file.Path;
import java.nio.file.Paths;
public class PathSeperator {
public static void main(String[] args) {
// the path seperator for this system
String pathSep = System.getProperty("path.separator");
// my home directory
Path homeDir = Paths.get(System.getProperty("user.home"));
// lets print them
System.out.println("Path Sep: " + pathSep);
System.out.println(homeDir.toAbsolutePath());
// as it turns out, on my linux it is a colon
// and Java is using forward slash internally
// lets add some more directories to the user.home
homeDir = homeDir.resolve("eclipse").resolve("configuration");
System.out.println("Appending more directories using resolve()");
System.out.println(homeDir);
}
}
你应该使用 /
例如 C:/用户/...