Java C:和C:之间的差异:/

Java C:和C:之间的差异:/,java,windows,Java,Windows,我刚刚读了一些java书籍,制作了一些小程序供练习,我创建了一个小代码来获取我输入的路径信息,代码是: String path = JOptionPane.showInputDialog("Enter Path to analyze"); File file = new File(path); if (file.exists()) { String result = ""; if (file.isDirectory()) { result += "P

我刚刚读了一些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中也会发生同样的情况

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


D:
与您的案例中的
D://
相同,因为根目录是
D:

中的当前工作目录。这实际上不是java问题,而是windows/dos问题

解释可以归结为用于切换驱动器的旧dos命令

在dos中键入驱动器号后加冒号是更改驱动器的命令,因此“命令”
C:
不起任何作用,因为您的工作目录已经在C驱动器上。本机接口返回给JRE的“目录”与使用路径“”时相同,即工作目录

另一方面,添加一个斜杠,它是一个正确的路径,指向C驱动器的根目录,因此本机接口为JRE提供了这个目录

如果您转到dos命令(windows>run>cmd)并键入
C:
,您将看到它接受该命令但不更改目录,当然,除非您当时在另一个驱动器上


希望这能有所帮助。

@Robert:Windows并不在乎你给它的是
/
s还是“\`s向前的斜杠是用来切换的,不是用来分隔文件夹的。我这样做已经有一段时间了,我从来没有用斜杠在Windows中分隔文件夹。@Robert:对不起。你的意思是什么?至少对我来说,
C:
的处理方式与
D:
不同,这是非常奇怪的。在这里,是否使用正向斜杠与此无关。
文件
API将在当前操作系统为Windows时自动将正向斜杠转换为反向斜杠。检查
java.io.Win32FileSystem#normalize()
方法,该方法由
java.io.File
构造函数调用。但是Windows本身,例如在命令提示符下,实际上并不使用前斜杠,例如在文件夹中导航。。。自从我使用的第一个DOS版本以来,
C:
意味着C:'上的当前工作目录,而
C:\
意味着
C:
Windows的根目录肯定会分别跟踪每个驱动器上的CWD,此外,还会跟踪当前的工作驱动器。这两者的结合就是你所知道的*nix上的CWD。@Marko:是的,我刚刚签入了一个
cmd.exe
,注意到了。谢谢是的,它确实是运行项目的当前目录,因为C:的结果正好是项目文件夹中的文件和文件夹!一条评论说,这种行为不能在Windows7上重复(该评论可能已被删除),因此可能只针对WindowsVista。不过,我还没有检查过任何其他版本的Windows。@SpeedBirdNine:我很怀疑Windows版本之间的基本行为是否不同(既然它已经存在了几十年,为什么他们要改变它?)。更可能的是,不同OSs的JRE版本或JRE包之间存在差异。一般行为(跟踪每个驱动器的最后一个目录)在win 7下也很正常:
cd d:/foo;cd c:/;cd d:#我们现在再次进入d:/foo