【问题标题】:Java / groovy - configure file separatorJava/groovy - 配置文件分隔符
【发布时间】:2019-12-02 15:21:36
【问题描述】:

我想强制路径分隔符为正斜杠 (/),无论它运行在哪个操作系统上;我想使用Paths.get(s1, s2) 而不是String.join("/", s1, s2)

我正在开发一个与平台无关的应用程序(Windows 和 Linux),我需要在其中生成路径。应用程序可能会处理来自与其当前运行的操作系统不同的路径(它可以连接到运行不同操作系统的不同存储)。因此,无论它在哪个操作系统上运行,我都可能将这些作为输入(需要产生这些输出):

适用于:

Paths.get("/tmp",   "foo.jpg"); // Linux -> "/tmp/foo.jpg"
Paths.get("C:/tmp", "foo.jpg"); // Win   -> "C:/tmp/foo.jpg"

不是

Paths.get("C:\tmp", "foo.jpg"); // XXX Expected: Win -> "C:/tmp/foo.jpg"

Windows 路径使用正斜杠,即使默认情况下使用反斜杠。决定(不是我决定)正斜杠将始终用作系统中的目录分隔符。

有没有办法做到这一点,而不是 hacky?目前它是用String.join() 完成的,但是 IMO 太老套了。

【问题讨论】:

  • 我无法测试,但是您的第三个示例已经在执行您想要的操作并且我没有得到问题,或者您进行了一些复制粘贴错字并且您的评论是错误的?
  • 在第三个示例中,输入路径中的反斜杠分隔符被转换为输出路径中的斜杠分隔符。
  • 所以这是你想要的行为,但它现在不是这样工作的?
  • 如果你使用 Paths.get() 就不行。根据您运行它的主机操作系统,它的行为会有所不同。例如,即使您在 Linux 主机上运行它,也无法对它说“将其视为 Windows 路径”。也没有办法说“在 Windows 上使用 '/' pa 作为路径分隔符”。并且使用 String.join() 有其自身的一系列问题:您需要特别注意前面/后面的斜杠,验证路径字符......例如,在 Linux 上,反斜杠是在文件中使用的有效字符/目录名称。在 Windows 上不是。
  • 我可以自己编写所有逻辑,但这就是重点。该逻辑应由语言/库提供。有些东西应该作为配置选项公开。今天越看越发现今天的语言不支持这个。

标签: java groovy


【解决方案1】:

前段时间我曾考虑过同样的问题。我使用 .replace() 方法来修复它。 只要是依赖于操作系统的,就不能一概而论。

继续使用 hacky 技术:p

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多