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 中也会发生同样的情况!

4

2 回答 2

10

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

D:与您的情况相同,D:/因为根目录D:.

于 2012-04-26T18:29:15.907 回答
3

这不是一个真正的 java 问题,而是一个 windows/dos 问题。

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

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

另一方面,添加一个斜杠,它是一个正确的路径,指向您的 C 驱动器的根目录,因此您的 JRE 由本机界面提供此目录。

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

希望有帮助。

于 2012-04-26T18:30:23.433 回答