特定文件系统的 Java 路径

标签 java path nio

阅读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/

相关文章:

Java ExecutorService : awaitTermination of all recursively created tasks

macos - Mac OS X HFS+ 中最长的路径名字符串

java - 为什么将 java 文件编译成 jar 文件后图像路径不再起作用?

java - 在 JToggleButton 中保存选择

java - 即使 Optional 包含值,Optional.orElse 的参数也会被调用

java - Java 中通过 POSIX AIO 或 Windows 重叠 IO 的异步文件 I/O

jar 中的 Java 访问文件导致 java.nio.file.FileSystemNotFoundException

java - 关闭非阻塞套接字 channel

Javax.sound.midi 学习代码不适用于 MacOS X

java - 保存文件的相对路径