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


当前回答

迟到了。我使用的是Windows 10, JDK 1.8和Eclipse MARS 1。 我发现

.getResourceAsStream .getClassLoader getClass()()(“路径/ /资源”);

工作和

.getResourceAsStream .getClassLoader getClass()()(“路径”+ File.separator + " " + File.separator +“资源”);

不工作

.getResourceAsStream .getClassLoader getClass()()(“路径\ \资源”);

不管用。后两个是等价的。所以…我有很好的理由不使用File.separator。

其他回答

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

便携性简单明了。

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

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

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

如果你使用的是Java 7,签出Path.resolve()和Paths.get()。