【发布时间】: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 上不是。
-
我可以自己编写所有逻辑,但这就是重点。该逻辑应由语言/库提供。有些东西应该作为配置选项公开。今天越看越发现今天的语言不支持这个。