使用文件有什么区别。分隔符和正常的/在Java路径字符串?

与双反斜杠相比,平台独立性似乎不是原因,因为这两个版本都可以在Windows和Unix下运行。

public class SlashTest {
    @Test
    public void slash() throws Exception {
        File file = new File("src/trials/SlashTest.java");
        assertThat(file.exists(), is(true));
    }

    @Test
    public void separator() throws Exception {
        File file = new File("src" + File.separator + "trials" + File.separator + "SlashTest.java");
        assertThat(file.exists(), is(true));
    }
}

换句话说,如果/可以在Unix和Windows上工作,为什么要使用File.separator?


当前回答

文件或目录的路径名使用主机系统的命名约定指定。但是,File类定义了与平台相关的常量,可用于以与平台无关的方式处理文件和目录名。

文件。分隔符定义在路径名中分隔目录和文件组件的字符或字符串。对于Unix、Windows和Macintosh,分隔符分别为'/'、'\'或':'。

其他回答

操作系统比Unix和Windows多(可移植设备等),Java以其可移植性而闻名。最佳实践是使用它,这样JVM就可以确定哪个最适合该操作系统。

如果您试图使用Linux分隔符从一些现成的路径(保存在数据库中,每个例子)创建一个文件,我应该怎么做?

也许只需要使用创建文件的路径:

new File("/shared/folder/file.jpg");

但是Windows使用不同的分隔符(\)。那么,是否可以将斜杠分隔符转换为平台无关的?如:

new File(convertPathToPlatformIndependent("/shared/folder"));

这个方法convertPathToPlatformIndependent可能会被“/”分割,并连接File.separator。

对我来说,这对于独立于平台的语言来说并不好(对吧?),而且Java已经支持在Windows或Linux上使用/。但是如果您使用的是路径,并且每次都需要记住这种转换,这将是一场噩梦,并且您将不会为应用程序在未来获得任何实际收益(可能在@Pointy所描述的宇宙中)。

文件或目录的路径名使用主机系统的命名约定指定。但是,File类定义了与平台相关的常量,可用于以与平台无关的方式处理文件和目录名。

文件。分隔符定义在路径名中分隔目录和文件组件的字符或字符串。对于Unix、Windows和Macintosh,分隔符分别为'/'、'\'或':'。

使用文件。separator使Ubuntu生成的文件名称上有“\”而不是目录。也许我在如何创建文件(和目录)方面很懒惰,本可以避免它,无论如何,每次都使用“/”来避免名称上带有“\”的文件

虽然使用File。分隔符来引用文件名是多余的(对于那些想象遥远的地方的人来说,我想象他们的JVM实现将用a:替换/,就像windows的JVM用\替换它一样)。

然而,有时您正在获取文件引用,而不是创建它,您需要解析它,为了能够做到这一点,您需要知道平台上的分隔符。文件。Separator帮助你做到这一点。