阅读documentation on Path在其他地方,对我来说很明显,它总是需要虚拟机运行的文件系统。但是,我想向 Java 明确表示我想要 Unix 路径。
原因是我通过 Jackson 将路径导出为 JSON,并且在序列化器中使用 toString()
为不同的虚拟机返回不同的结果。简单来说,即使我在 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());
}
}
要在 Windows 上解决这个问题,我当然可以这样做:
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
,但恕我直言,这有点蹩脚。
最佳答案
这适用于所有平台:
@Override
public void serialize(Path path, JsonGenerator jsonGenerator, SerializerProvider provider) throws IOException, JsonProcessingException
{
jsonGenerator.writeString(path.toString().replace(File.separator, "/"));
}
使用处理文件的 Java 库,您可以在所有平台上安全地使用/(斜杠,而不是反斜杠)。库代码在内部处理将事物转换为特定于平台的路径。话虽如此,无论稍后使用什么操作系统读取路径都能够正确构建它。
关于特定文件系统的 Java 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36079582/