![](/img/trans.png)
[英]Do java.io.File(String parent, String child) and java.io.File(String pathname) do the same work?
[英]java.io.File(parent, child) does not work as expected
我正在尝试根据用户提供的文件名(可以是绝对的或相对的)和依赖于环境的基目录构造一个 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 吗?
如果子路径名字符串是绝对的,那么它会以系统相关的方式转换为相对路径名。
我认为这意味着即使您提供了绝对路径,它也会被转换为(以依赖于系统的方式)并被视为相对路径。
这意味着我必须找出确切的相对路径(或至少测试不同的选项以查看文件是否存在)。
是的,我相信如此。
这也许可以轻松完成
file.getAbsolutePath().startsWith(parent.getAbsolutePath());
检查它是否是parent
目录中的绝对路径,以及
file.getAbsolutePath().substring(parent.getAbsolutePath().length());
得到相对部分。
将您的基本目录表示为Path
,例如
Path basePath = new File("C:/Temp").toPath();
您可以使用Path.resolve
来确定您的fileName
的Path
(或File
),无论它是绝对的还是相对的:
Path path = basePath.resolve(fileName).normalize();
File file = path.toFile();
这里额外的normalize
只负责清理任何.
或..
从路径。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.