为什么我们要在文件目录中加正斜杠来区分目录和文件?

Why do we have to add forward slash in the file directory to differentiate between directory and files?

for 循环内:

为什么我必须在目录名后添加正斜杠? 例如:

for(int i = 0; i<s.length; i++){
    File f = new File(dirname + "/" + s[i] ); 
    // Why to add "/" after dirname(i.e directory name)
    if(f.isDirectory()){
        System.out.println(s[i] + " is Directory" );
    }else{
        System.out.println(s[i] + " is File");
    }
}

如果我在 dirname 之后删除反斜杠“/”:

File f = new File(dirname + "/" + s[i] ); 

当我删除“/”时:

File f = new File(dirname + s[i] ); 

不区分目录和文件。里面的所有文件都会被认为是文件。 我加个反斜杠后就没事了。它将区分目录和文件。这是为什么? 为什么我要加“/”。该程序旨在查看文件内部而不添加“/”。

包含和省略 / 表示文件指向不同的路径。例如,"foo/bar""foobar"是不同的路径,会指向文件系统中的不同对象:

Parent directory
+-- foobar     "foobar"
+-- foo
    +-- bar    "foo/bar"

不是目录与文件不同。因此,很可能(我们不知道您的文件系统中有什么)它不是目录,因为它不存在。

您应该先检查 if (!f.exists())(或类似的):

if (!f.exists()) System.out.println("Doesn't exist");
else if (f.isDirectory()) ... etc

此外,请注意您无论如何都不应该添加 / - 使用双参数构造函数:

File f = new File(dirname, s[i] ); 

斜线符号是 file separator。这用于将目录与文件分开。

如果您要构建字符串,文件名将为:

Pictures/my-dog.png

在这里,您会看到有一个名为 "Picture" 的目录和一个名为 "my-dog.png" 的文件。

如果您要删除斜杠,它将看起来像一个长文件名:

Picturesmy-dog.png