当我尝试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:\\\\"
时。为什么呢?
答案 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:
对象。无论你使用哪个对象,它的行为都是正确的。