Path.toFile()的奇怪行为

时间:2015-03-22 20:20:08

标签: 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(); //this was defaulting to current execution directory  

然而,当我尝试传递似乎已解决问题的"C:\\\\"时。为什么呢?

1 个答案:

答案 0 :(得分:4)

这就是Windows上C: 的含义。当用作路径时,它指的是C驱动器上的当前工作目录。 (在Windows上,每个驱动器都有一个不同的当前工作目录。)同样,C:file.txt之类的内容指的是C驱动器当前工作目录中的file.txt。如果您想引用驱动器的根目录,那就是C:\

然而,调用toFile()不应该导致这种情况,正如文档所说:

  

如果此Path与默认提供程序关联,则此方法等效于返回使用此路径的File表示构造的String对象。

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

Path p = Paths.get("C:");
File f = p.toFile();
System.out.println(p);
System.out.println(f);

两行的输出都是C:

如果您获得的File对象的字符串表示形式与Path的字符串表示形式不同,那么这是您的Java版本中的错误。

否则,这是一个误解,toFile()方法正确地返回引用File的{​​{1}}对象。但是当您使用对象访问时,它将访问当前的工作目录。那么使用C:对象。无论你使用哪个对象,它的行为都是正确的。