18

我正在寻找(分别)在与我的程序不同的目录中写入和读取文本文件。当我指定要写入或读取的目录时,我应该使用正斜杠还是反斜杠来标识文件路径?

4

4 回答 4

36

使用正斜杠将使其独立于系统。为简单起见,我会坚持这一点。

java.io.File.separator如果您曾经向用户显示路径,请考虑使用。您不想让那些 Windows 用户感到惊讶。他们是一个神经质的人。

于 2013-11-04T05:35:26.410 回答
17

我从未在任何地方找到它的文档,但 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.

于 2013-11-04T05:35:14.857 回答
5

你可以使用任何一个。

如果你使用/,那么你只需要一个斜杠。
如果使用\,则需要使用\\。也就是说,你需要逃避它。

您也可以使用类的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);

    }
}  
于 2013-11-04T05:34:58.417 回答
0

你应该使用 /

例如 C:/用户/...

于 2013-11-04T05:37:36.773 回答