Java 正斜杠还是反斜杠?
我希望将文本文件写入和读取(分别)与我的程序不同的目录。当我指定要写入或读取的目录时,是否应该使用正斜杠或反斜杠来标识文件路径?您可以使用其中一种 如果使用Java 正斜杠还是反斜杠?,java,text,file-io,slash,Java,Text,File Io,Slash,我希望将文本文件写入和读取(分别)与我的程序不同的目录。当我指定要写入或读取的目录时,是否应该使用正斜杠或反斜杠来标识文件路径?您可以使用其中一种 如果使用/,则只需要一个斜杠。 如果使用\,则需要使用\\。也就是说,你需要逃避它 您还可以使用java.nio.Path类的resolve()方法将目录/文件添加到现有路径。这避免了使用前斜杠或后斜杠的麻烦。然后,您可以通过调用toabsolutionPath()方法,然后调用toString() SSCCE: import java.nio.fi
/
,则只需要一个斜杠。如果使用
\
,则需要使用\\
。也就是说,你需要逃避它
您还可以使用java.nio.Path
类的resolve()
方法将目录/文件添加到现有路径。这避免了使用前斜杠或后斜杠的麻烦。然后,您可以通过调用toabsolutionPath()
方法,然后调用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);
}
}
我从来没有在任何地方找到它的文档,但是JDK类允许您使用斜杠,不管您是否在Windows上。(您可以在JDK源代码中看到这一点,它在其中显式地为您转换路径分隔符。)
正式-当然在您正在进行的任何UI中-您应该使用文件.separator
,该文件可通过System.getProperty
获得(标准系统属性列表已记录在案):
…也可以通过静态
字段,将其作为(和)提供
您还可以使用的各种功能组合和拆分路径,和/或中接口和类的各种功能。使用前斜杠将使其独立于系统。为了简单起见,我坚持这一点 如果要向用户显示路径,请考虑使用。你最好不要让那些Windows用户感到惊讶。他们很紧张。你应该使用/
例如C:/User/…使用
/
使应用程序独立于操作系统。不要将路径硬编码到程序中,使其独立于安装。@LittleChild:谢谢,添加了一条关于java.nio.file
的注释。我相信您可能是想参考System.getProperty(“file.separator”)
(在UNIX上返回一个/
),而不是System.getProperty(“path.separator”)
(在UNIX上返回一个;
)+1我一直忘了java.io.File.separator
(和separatorChar
)。@T.J.Crowder。更不用说pathselector
和pathselectorchar
)@Paul:,但这些是类路径,而不是文件路径。如果您回答了为什么,您的答案会有很大的改进。有时需要反斜杠,但出于可移植性的考虑,对于公共共享代码,最好避免使用反斜杠。根据我的经验,它很少有用或必要,即使在Windows上开发时也是如此。
String sep = System.getProperty("file.separator");