我有一个文件
/user/guest/work/test/src/main/java/Test.java
和File - 对象:
File f = new File("/user/guest/work/test/src/main/java/Test.java");
我需要这个输出
System.out.println(f); -> src/main/java/Test.java
System.out.println(f.getAbsolutePath()); -> /user/guest/work/test/src/main/java/Test.java
我试过了:
File relativeTo = new File("/user/guest/work/test");
new File(relativeTo.toURI().relativize(f.toURI()));
但它正在抛出
java.lang.IllegalArgumentException: URI is not absolute
at java.io.File.<init>(File.java:416)
at Test.<init>(Test.java:43)
如何获得所需的输出?
答案 0 :(得分:3)
您可以使用路径解析来重新激活文件路径
File f = new File("/user/guest/workspace/test/src/main/java/Test.java");
File relativeTo = new File("/user/guest/workspace/test");
System.out.println(new File(relativeTo.toPath().resolve(f.toPath()).toUri()));
答案 1 :(得分:3)
relativize
返回一个URI。
new File(URI uri)
需要......
uri - 绝对,分层URI
您可以尝试使用String构造函数。
new File(relativeTo.toURI().relativize(f.toURI()).toString());
您可以通过其他方式访问该文件,但
例如,您可以尝试使用java.nio.file.Path
API代替java.io.File
喜欢
Path path = Paths.get("/", "user", "guest", "workspace",
"test", "src", "main", "java", "Test.java");
Path other = ...
Path relPath = other.relativize(path);
// relPath.toString(); // print it
// relPath.toFile(); // get a file