java.io.File(parent,child)无法按预期工作

时间:2011-09-01 11:34:51

标签: java file io

我正在尝试基于用户提供的文件名(可以是绝对的或相对的)和依赖于环境的基本目录来构造Java File对象。 java.io.File(File parent,String child)的java doc说明如下:

  

如果子路径名字符串是绝对的,那么将以系统相关的方式转换为相对路径名

这让我觉得如果我有以下代码:

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吗?

2 个答案:

答案 0 :(得分:8)

  

如果子路径名字符串是绝对的,那么它将以系统相关的方式转换为相对路径名。

我认为这意味着即使您提供绝对路径,它也会转换为(以系统相关的方式),并视为相对路径。

  

这意味着我必须弄清楚确切的相对路径(或至少测试不同的选项以查看文件是否存在)。

是的,我相信。

这可能很容易用

完成
file.getAbsolutePath().startsWith(parent.getAbsolutePath());

检查它是否是parent

中目录的绝对路径
file.getAbsolutePath().substring(parent.getAbsolutePath().length());

得到相对的部分。

答案 1 :(得分:0)

将基本目录表示为Path,例如

Path basePath = new File("C:/Temp").toPath();

您可以使用Path.resolve来确定Path的{​​{1}}(或File),无论它是绝对的还是相对的:

fileName

这里另外的Path path = basePath.resolve(fileName).normalize(); File file = path.toFile(); 只是负责清理路径中的任何normalize.