Java 为什么JVM不能检测到一些无效路径

Java 为什么JVM不能检测到一些无效路径,java,Java,我想知道为什么当要求JVM创建无效路径时,它不会抛出任何异常,例如“C:invalidPath”。 例如: public static void main(String[] args) { File f = new File("C:invalidPath"); f.mkdir(); } 上一个示例在当前文件夹中创建一个名为“invalidPath”的文件夹。我认为这是不正常的。您指定的路径是Microsoft Windows上的合法路径。它被指定为相对于卷C上当前工作目录的路径。

我想知道为什么当要求
JVM
创建无效路径时,它不会抛出任何异常,例如“
C:invalidPath
”。 例如:

public static void main(String[] args)  {
   File f = new File("C:invalidPath");
   f.mkdir();
}

上一个示例在当前文件夹中创建一个名为“invalidPath”的文件夹。我认为这是不正常的。

您指定的路径是Microsoft Windows上的合法路径。它被指定为相对于卷C上当前工作目录的路径。在Windows上,与之前的DOS一样,每个卷都有一个单独的与之关联的工作目录,另外还有当前工作卷的概念。

这不是JVM的过错或责任

由底层文件系统将路径规范(即字符串)转换为名称所代表的实际逻辑文件。JVM只是将这个字符串传递给文件系统,文件系统决定如何处理它

所以真正的问题是“为什么NTFS[假设您使用的是这样的]将'C:invalidPath'解释为在当前目录中创建该文件?”。原因很简单,这就是为这个文件系统定义路径的方式

发件人:

如果文件名仅以磁盘指示符开头,而不是冒号后的反斜杠,则会将其解释为指向驱动器上当前目录的指定字母的相对路径。请注意,当前目录可能是根目录,也可能不是根目录,这取决于它在该磁盘上最近的“更改目录”操作期间设置的内容。该格式的示例如下:

  • “C:tmp.txt”是指驱动器C上当前目录中名为“tmp.txt”的文件