"C:"和"C:/"之间的区别是什么?

6

我刚刚在阅读一本Java书籍,并练习了一些小程序。我创建了一个小代码来获取我输入的路径信息,代码如下:

String path = JOptionPane.showInputDialog("Enter Path to analyze");

File file =  new File(path);

if (file.exists())
{
    String result = "";
    if (file.isDirectory())
    {
        result += "Path is directory\n ";
        String [] resList = file.list();

        for (String s : resList)
        {
            result += s + ", ";
        }
    }
    if (file.isFile())
    {
        result += "Path is a file\n";
    }

    JOptionPane.showMessageDialog(null, result);

现在在输入对话框中,当我输入 C: 时,结果是 build, build.xml, manifest.mf, nbproject, src,但当我输入 C:/ 时,它显示了 C 目录中完整的目录和文件列表。而奇怪的是,在 D 和其他驱动器上不会发生这种情况(即 D:/ 和 D: 的结果相同),请解释一下发生了什么?更新: 在使用 C# 的 WPF 中也是如此。

2
@Robert:Windows并不在意你是用/还是\\ - Niklas B.
1
正斜杠用于开关,而不是文件夹分隔符。我已经这样做了一段时间了,在Windows中从未使用过正斜杠来分隔文件夹。 - Robert Harvey
2
@Robert:抱歉,你的意思是什么?对我来说,C:D:的处理方式不同很奇怪。无论你是否使用正斜杠,在这里都非常不相关。 - Niklas B.
2
当当前操作系统为Windows时,File API将会自动将正斜杠转换为反斜杠而不发出任何警告。请查看被java.io.File构造函数调用的java.io.Win32FileSystem#normalize()方法。但是在Windows本身中(例如在命令提示符中),前斜杠并不能被识别为导航文件夹的路径。 - BalusC
7
等一下,各位……自从我使用第一个DOS版本开始,C: 意味着 当前工作目录在 C 盘,而 C:\ 则意味着 C 盘的根目录 - Marko Topolnik
显示剩余9条评论
2个回答

10

C:表示“当前在驱动器C:上所选的任何目录”。在您的情况下,这可能是应用程序正在运行的目录。

D:在您的情况下与D:/相同,因为根目录就是D:中的当前工作目录。


2
Windows 绝对会分别跟踪每个驱动器上的 CWD,并且除此之外还会跟踪当前工作驱动器。这两者的组合就是你在 *nix 上所知道的 CWD。 - Marko Topolnik
@Marko:是的,我刚在cmd.exe中检查了一下,注意到了。谢谢! - Niklas B.
是的,这确实是项目运行的当前目录,因为在C:的情况下,结果正好是项目文件夹中的文件和文件夹!有一条评论说这种行为无法在Windows 7上重复(该评论可能已被删除),所以可能只适用于Windows Vista。虽然没有在任何其他版本的Windows上进行过检查。 - SpeedBirdNine
1
@SpeedBirdNine:我非常怀疑Windows版本之间的基本行为是否有所不同(为什么要改变它,毕竟它已经存在了几十年?)。更有可能的是,不同操作系统的JRE版本或JRE软件包之间存在差异。 - Niklas B.
好的,谢谢您的纠正,最可能是JRE版本的问题,我可以使用C#在WPF中重复相同的事情。 - SpeedBirdNine
1
通用行为(跟踪每个驱动器的最后一个目录)在Win 7下也可以正常存在:cd d:/foo; cd c:/; cd d: #我们现在又回到了d:/foo - Voo

3

这并不是一个Java问题,而是一个Windows / DOS问题。

解释归结为旧的DOS命令切换驱动器。在DOS中,输入一个驱动器号码后加上冒号是切换驱动器的命令,因此“命令”C:不会做任何事情,因为你的工作目录已经在C驱动器上了。本地接口返回的“目录”与使用路径“”时相同,即你的工作目录。

另一方面,加上斜杠后它就成为一个正确的路径,指向你的C驱动器根目录,因此本地接口将该目录提供给JRE。

如果你进入DOS命令窗口(Windows>运行>cmd),然后输入C:,你会发现它可以接受并执行该命令,但不会改变目录,除非当时你正在其他驱动器上。

希望对你有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接