我正在尝试基于用户提供的文件名(可以是绝对的或相对的)和依赖于环境的基本目录来构造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());
}
}
Run Code Online (Sandbox Code Playgroud)
输出将是
C:\Temp\file.txt
Run Code Online (Sandbox Code Playgroud)
然后我开始经营,因为如果用户提供绝对路径或相对路径,那就不再重要了.但事实上,输出是
C:\Temp\C:\Temp\file.txt
Run Code Online (Sandbox Code Playgroud)
这意味着我必须弄清楚确切的相对路径(或者至少测试不同的选项以查看文件是否存在).我误解了JavaDoc吗?
如果子路径名字符串是绝对的,那么它将以系统相关的方式转换为相对路径名.
我认为这意味着即使你提供了一个绝对路径,它也会被转换为(以系统相关的方式),并被视为相对路径.
这意味着我必须弄清楚确切的相对路径(或者至少测试不同的选项以查看文件是否存在).
是的,我相信.
这可能很容易完成
file.getAbsolutePath().startsWith(parent.getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)
检查它是否是目录中的绝对路径parent,和
file.getAbsolutePath().substring(parent.getAbsolutePath().length());
Run Code Online (Sandbox Code Playgroud)
得到相对的部分.