【发布时间】:2011-09-01 11:34:51
【问题描述】:
我正在尝试基于用户提供的文件名(可以是绝对的或相对的)和依赖于环境的基目录来构造 Java File 对象。 java.io.File(File parent, String child) 的 java 文档说明如下:
如果子路径名字符串是绝对的,则它会以系统相关的方式转换为相对路径名。
这让我觉得如果我有以下代码:
public class TestClass {
public static void main(String[] args) throws IOException {
File file = new File(new File("C:/Temp"),"C:/Temp/file.txt");
System.out.println(file.getAbsolutePath());
}
}
输出将是
C:\Temp\file.txt
然后我会做生意,因为如果用户提供绝对或相对路径,这将不再重要。但实际上输出是
C:\Temp\C:\Temp\file.txt
这意味着我必须找出确切的相对路径(或者至少测试不同的选项以查看文件是否存在)。我是否误解了 JavaDoc?
【问题讨论】:
-
子路径名必须是相对路径名。我认为,转换讨论的是斜杠与反斜杠。在您的情况下,您必须在继续之前确定路径是否是绝对路径。
-
如果您使用(更正确的)
"C:\\Temp"和"C:\\Temp\\file.txt"而不是使用前向冲突,行为是否相同?我目前没有安装 JDK 的 Windows PC,所以我无法对此进行测试。另外:new File("C:/Temp").isAbsolute()打印什么? -
@Joachim:
"C:/Temp"和"C:\\Temp"的处理方式相同。new File("C:/Temp").isAbsolute()打印true. -
@Joachim -
isAbsolute对所有四个路径都返回 true - 无论使用哪个斜线 -
我在测试中发现如果你执行
new File("directory", "/file")和`new File("directory", "file"),它们都会产生绝对路径"directory/file"。第一个不会导致“目录//文件”。