当前位置: 首页 > 面试题库 >

为什么在Windows上File.pathSeparatorChar是分号?

牛经赋
2023-03-14
问题内容

Javadoc指出File.pathSeparatorChar

与系统有关的路径分隔符。该字段被初始化为包含系统属性path.separator的值的第一个字符。该字符用于分隔作为路径列表给出的文件序列中的文件名。在UNIX系统上,此字符为:;。在Microsoft
Windows系统上是;

但这似乎很奇怪,因为分号不是Windows路径的禁止字符(对于引用,这些字符是\ / : * ? " < >
|,请参阅Windows资源管理器的重命名功能)。

例如,使用以下代码:

String test = "C:\\my;valid;path" + File.pathSeparator + "C:\\Windows";
String[] tests = test.split(File.pathSeparator);

tests将包含C:\\my valid path C:\\Windows,这不是预期的。

所以问题是:为什么这个字符不像Unix那样是冒号?我可以强迫我的代码使用冒号,但这似乎无法实现在JDK中具有html" target="_blank">常量的目的。

编辑:Reimeus解释了为什么它在Windows上不能是冒号(它是驱动器分隔符),但是我真正感兴趣的是它不是不能出现在路径中的字符的原因,例如|


问题答案:

PATH分隔符很长时间以来一直是分号,大概是从MS-
DOS的第一个发行版开始。(根据Thorsten的回答,我假设Java只是遵循Windows约定,大概是因为Java程序员很可能会假设他们可以pathSeparatorChar解析PATH的值,而不是仅解析Java本身生成的文件列表。

对于此类分隔符(类似于英语),最明显的选择是句号,逗号和分号。该时间段将与8.3文件名格式冲突。在逗号上选择分号可能是任意的。

无论如何,分号在当时不是文件名中的合法字符,因此没有理由更喜欢逗号。而且,当然,因为现在
逗号和分号是合法的,我们也不会有任何更好,如果他们有。:-)



 类似资料:
  • 我使用Win 10 Pro N(版本1709)作为开发机器,使用Windows Server 2016 Standard(版本1607)作为生产服务器。 我目前正在开发一个使用MongoDb作为数据库的ASP.NET Core2应用程序。 几天前,我第一次偶然发现了这个想法,将MongoDb作为Docker映像运行。 这是个好决定吗?或者在我的场景中我应该使用Linux容器而不是Windows容器

  • 问题内容: 我不了解git中与CrLf设置相关的复杂性, 我正在一个团队中开发一个跨平台项目,希望Windows和Linux开发人员能够一起工作,而无需将git标记的文件仅由于行尾样式而修改。 各种设置是什么意思?选择任何选项会有什么后果?而对我来说,最好的解决方案是什么? 是的,我知道这个问题,那里的答案没有见地,因此无济于事。 问题答案: 的三个值: -当内容进入存储库(已提交)时,其行尾将转

  • 在 Windows VSCode 上, 显示一个菜单,其中包含活动栏上的项目。 那是什么命令? 我切换到Linux,想在命令中添加一个键绑定(默认情况下没有映射,因为在Linux上< code>ctrl q退出程序),但是找不到它,而且手头没有Windows机器来查看键绑定,这里似乎没有列出。

  • 我在看一个典型的for循环: 我对int I=1后的分号很满意:它是一个声明新变量的语句。如果i也是一个语句,为什么后面没有分号? 另一个例子。我打开Jshell并放置以下内容: 换句话说,命令可以工作,与是否有分号无关。我希望没有它就无法工作。 最后一个示例(改编自关于

  • 在入门篇我们简单地讲解了Git的基本使用方法。在高级篇呢,我们首先要讲解一下分支的使用方法和操作。 在开发软件时,可能有多人同时为同一个软件开发功能或修复BUG,可能存在多个Release版本,并且需要对各个版本进行维护。 所幸,Git的分支功能可以支持同时进行多个功能的开发和版本管理。 什么是分支? 分支是为了将修改记录的整体流程分叉保存。分叉后的分支不受其他分支的影响,所以在同一个数据库里可以

  • 什么是分支? 假设你的工作是维护本公司一个部门的手册文档,一天,另一个部门问你要相同的手册,但一些地方会有“区别”,因为他们有不同的需要。 这种情况下你会怎样做?显而易见的方法是:作一个版本的拷贝,然后分别维护两个版本,只要任何一个部门告诉要做一些小修改,你必须选择在对应的版本进行更改。 你也许希望在两个版本同时作修改,举个例子,你在第一个版本发现了一个拼写错误,很显然这个错误也会出现在第二个版本