【发布时间】:2016-07-04 22:11:16
【问题描述】:
阅读documentation on Path 和其他地方,对我来说很明显,它总是需要运行VM 的文件系统。但是,我想向 Java 说明我想要 Unix 路径。
原因是我通过 Jackson 将路径导出为 JSON,并且在序列化程序中使用 toString() 会为不同的 VM 返回不同的结果。简单来说,即使我在 Windows 机器上开发,我也想得到这个:
{"path":"/tmp"}
我的序列化器如下所示:
public class PathSerializer extends JsonSerializer<Path> {
@Override
public void serialize(Path path, JsonGenerator jsonGenerator, SerializerProvider provider) throws IOException, JsonProcessingException {
jsonGenerator.writeString(path.toString());
}
}
为了解决这个问题,我当然可以这样做:
public class PathSerializer extends JsonSerializer<Path> {
@Override
public void serialize(Path path, JsonGenerator jsonGenerator, SerializerProvider provider) throws IOException, JsonProcessingException {
jsonGenerator.writeString(path.toString().replace('\\', '/'));
}
}
但是,这并不独立于文件系统。我的意思是我知道我有什么目标系统,我不想在这里涵盖所有源系统。
我该怎么做?我的意思是最后的手段当然是使用String 而不是Path,但恕我直言,这有点蹩脚。
【问题讨论】:
-
什么值包含您的
path变量??是这样吗?例如:-foldername\\foldername\\filename -
@VikrantKashyap 绝对路径。目前 JSON 看起来像
{"path":"\\tmp"} -
您的问题有效。如果您的生产系统部署在“linux”上并且用户系统基于
windows,那么它将引发错误