【问题标题】:Concatenate absolute file paths in string连接字符串中的绝对文件路径
【发布时间】:2013-03-29 09:33:07
【问题描述】:

我需要在一个字符串中连接多个绝对文件路径。 但是如果我使用字符,那可能是文​​件名或路径的一部分,字符串会被弄乱。可以使用哪种分隔符?

现在我使用 File.pathSeparator,对于 Windows 7,它是 ';'。 但是这个字符可以是文件名的一部分。

SO question

Semicolons are legal in NTFS file paths.

【问题讨论】:

  • 你为什么不首先使用集合?
  • 我现在正在考虑管道符号,但我不确定其他文件系统。并且在 File.pathSeparator 返回 ';' 时仍然感兴趣但路径可以包含它。

标签: java concatenation filepath


【解决方案1】:

你可以使用File.pathSeparator:

系统相关的路径分隔符,表示为字符串 为了方便。该字符串包含单个字符,即pathSeparatorChar

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

【讨论】:

  • 我现在用它。但是,例如,Windows 7 中的文件名可以包含“;”。
  • 很遗憾,没有,虽然路径分隔符用于分隔路径,但没有什么可以阻止您在 Unix 上的文件名中使用冒号。
  • @YegoshinMaxim 您可以检查直到; 的路径是否存在,如果不存在,那么您知道它是文件名的一部分。顺便说一句,我使用它很长时间了,从未遇到过名称中带有; 的文件。
  • 要在 Linux 上创建一个名为 ;.:*?<>|\^ 的文件,请使用 touch ';.:*?<>|\^'
【解决方案2】:

ASCII NUL 字符 \0 不能成为 Windows 或 Unix(包括 Mac)上路径名的一部分,因此您可能可以将其用作分隔符。

NUL 字符不能用于文件路径,因为它是 C 中的字符串终止符,这些操作系统的 API 被定义为使用字符串表示文件路径的 C 库。

如果您想使用可打印字符作为分隔符,则必须使用转义码方案。最简单的方法之一是将分隔符加倍:假设您使用 # 作为分隔符;要将路径添加到列表中,请将路径中已经存在的任何 # 替换为 ##。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2014-10-29
    • 2020-05-18
    • 1970-01-01
    • 2013-04-17
    相关资源
    最近更新 更多