给定两条绝对路径,例如

/var/data/stuff/xyz.dat
/var/data

如何创建以第二个路径为基础的相对路径?在上面的示例中,结果应该是:./stuff/xyz.dat

推荐答案

这有点迂回,但为什么不使用URI呢?它有一个相对化的方法,可以为你做所有必要的判断.

String path = "/var/data/stuff/xyz.dat";
String base = "/var/data";
String relative = new File(base).toURI().relativize(new File(path).toURI()).getPath();
// relative == "stuff/xyz.dat"

请注意,从Java1.7开始,文件路径有java.nio.file.Path#relativize个,正如the other answer中的@Jirka Meluzin所指出的.

Java相关问答推荐

如何在PFA中使用不确定的进度指标制作可暂停的任务?

找到允许的最大底片

多个Java线程和TreeMap.put()的非预期行为

只需最少的代码更改即可将版本号标记添加到日志(log)

在springboot 3中,当我调用api endpoint时,会出现404

如何让DTO接受空字符串字段,但如果它们不为空,则应用JPA验证?

PDFBox未加载内容

声明MessageChannel Bean的首选方式

使用用户引入的参数生成人员数组

如何从日志(log)行中删除包名称?

Spring-Boot Kafka应用程序到GraalVM本机映像-找不到org.apache.kafka.streams.processor.internals.DefaultKafkaClientSupplier

如何在构建Gradle项目时排除com.google.guava依赖项的一个变体

如何在ImageIO或十二只猴子中旋转TIFF CMYK图像?

在Spring Boot JPA for MySQL中为我的所有类创建Bean时出错?

视图被推出线性布局-Android

如何在SWT菜单项文本中保留@字符

如何使用WebEnvironment.RANDOM_PORT获得第二个随机端口?

当使用不同的参数类型调用时,为什么围绕Objects.equals的类型安全包装不会失败?

如何在更改分辨率时将鼠标坐标计算为世界坐标

Springboot应用程序无法识别任何@RestController或@Service,我认为@Repository也无法识别