使用文件有什么区别。分隔符和正常的/在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?


当前回答

使用处理文件的Java库,您可以在所有平台上安全地使用/(斜杠,而不是反斜杠)。库代码在内部处理将内容转换到特定于平台的路径。

您可能需要使用File。分隔符,但是,因为它最好向人们展示什么在他们的操作系统中是有意义的,而不是什么在Java中是有意义的。

更新:在五分钟的搜索中,我还没能找到“你总是可以使用斜杠”的行为文档。现在,我确信我已经看到了它的文档,但在没有找到官方参考的情况下(因为我的记忆不完美),我将坚持使用File。分离器,因为你知道那会有用。

其他回答

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

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

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

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

正如两位先生所描述的不同细节。

我想推荐使用Apache Commons io api,类FilenameUtils在处理程序中的文件时,可以在多个操作系统上部署。

您使用File。分隔符,因为有一天你的程序可能会在一个遥远的地方开发的平台上运行,一个充满奇怪的事物和陌生的人的地方,在那里,马会哭,所有的电梯都是由奶牛操纵的。在这片土地上,人们传统上使用“:”字符作为文件分隔符,因此JVM服从他们的意愿。

便携性简单明了。