Java Path.toFile()的奇怪行为

Java Path.toFile()的奇怪行为,java,java-7,Java,Java 7,当我尝试执行Path.toFile,其中Path是C:,由于某种原因,生成的文件默认为当前执行目录 我正在C中的目录中执行: Scanner userInput = new Scanner(System.in); System.out.println("Enter directory to be scanned: ");//I pass C: Path inputPath = Paths.get(userInput.nextLine()); inputPath.toFile()

当我尝试执行Path.toFile,其中Path是C:,由于某种原因,生成的文件默认为当前执行目录

我正在C中的目录中执行:

Scanner userInput = new Scanner(System.in);   
System.out.println("Enter directory to be scanned: ");//I pass C:   
Path inputPath = Paths.get(userInput.nextLine());   
inputPath.toFile(); //this was defaulting to current execution directory  
然而,当我试着通过C:\\\\时,这似乎解决了问题。为什么?

这就是C:在Windows上的意思。当用作路径时,它指的是C驱动器上的当前工作目录。在Windows上,每个驱动器都有不同的当前工作目录。类似地,C:file.txt指的是C驱动器当前工作目录中的file.txt。如果要引用驱动器的根目录,则为C:\

但是,调用不应导致这种情况,如文档所述:

如果此路径与默认提供程序关联,则此方法相当于返回使用此路径的字符串表示形式构造的文件对象

当我运行此程序时,该方法似乎工作正常:

Path p = Paths.get("C:");
File f = p.toFile();
System.out.println(p);
System.out.println(f);
两行上的输出都是C:

如果您获取的文件对象的字符串表示形式与路径的字符串表示形式不同,则这是Java版本中的一个错误

否则,这是一种误解,toFile方法正确地返回了引用C:的文件对象。但是,当您使用对象访问对象时,它将访问当前的工作目录。使用路径对象也是如此。无论您使用哪种对象,它的行为都是正确的。

这就是C:在Windows上的意思。当用作路径时,它指的是C驱动器上的当前工作目录。在Windows上,每个驱动器都有不同的当前工作目录。类似地,C:file.txt指的是C驱动器当前工作目录中的file.txt。如果要引用驱动器的根目录,则为C:\

但是,调用不应导致这种情况,如文档所述:

如果此路径与默认提供程序关联,则此方法相当于返回使用此路径的字符串表示形式构造的文件对象

当我运行此程序时,该方法似乎工作正常:

Path p = Paths.get("C:");
File f = p.toFile();
System.out.println(p);
System.out.println(f);
两行上的输出都是C:

如果您获取的文件对象的字符串表示形式与路径的字符串表示形式不同,则这是Java版本中的一个错误


否则,这是一种误解,toFile方法正确地返回了引用C:的文件对象。但是,当您使用对象访问对象时,它将访问当前的工作目录。使用路径对象也是如此。无论您使用哪种对象,它的行为都是正确的。

为什么不向我们显示使用toFile方法的确切代码?请尝试使用路径。getc:\\.toFile insteadScanner userInput=new ScannerSystem.in;要扫描的System.out.printlnEnter目录://我传递C:Path-inputPath=Path.getuserInput.nextLine;inputPath.toFile;然而,当我试图通过C:\\时,似乎已经解决了问题。为什么?@KiranK在问题中添加代码我认为这是一个历史事件。在DOS shell COMMAND.COM中,C:不是路径,而是磁盘选择器,而C:\是指向C根目录的路径。为什么不向我们显示使用toFile方法的确切代码?请尝试使用路径。getc:\\.toFile insteadScanner userInput=new ScannerSystem.In;要扫描的System.out.printlnEnter目录://我传递C:Path-inputPath=Path.getuserInput.nextLine;inputPath.toFile;然而,当我试图通过C:\\时,似乎已经解决了问题。为什么?@KiranK在问题中添加代码我认为这是一个历史事件。在DOS shell COMMAND.COM中,C:不是路径,而是磁盘选择器,而C:\是指向C根目录的路径。