如何在Java中检索文件名的禁用字符?

Gno*_*upi 5 java filenames

对于文件和目录名称,存在一些受限制的字符(甚至是Windows中的完整文件名).这个问题已经涵盖了他们.

在Java中,有没有办法检索这个禁止字符列表,这取决于系统(有点像检索断路器字符)?或者我可以自己放置列表,检查系统?


编辑:除了一般性问题之外,还有更多关于我特定情况的背景信息.

我使用默认名称,来自某些数据(没有对其内容的真正控制),并且此名称将提供给JFileChooser,作为要使用的默认文件名(with setSelectedFile()).但是,这个会在最后一个无效字符之前截断任何内容.

这些默认名称有时会以"mm/dd/yy"格式结束日期,默认名称只留下"yy",因为"/"是禁止的.因此,检查Exceptions并不是一个真正的选项,因为文件本身甚至还没有创建.

编辑之二:嗯,这让我想到,如果JFileChooser正在截断名称,它可能有权访问这些字符的列表,可以进一步检查这一点.

编辑ter:好的,检查来自JFileChooser的来源显示了一些非常简单的东西.对于文本字段,它使用file.getName().它实际上并不检查无效字符,它只是将"/"作为路径分隔符,并仅保留结尾,即"实际文件名".其他禁止的角色实际上经历了.

Kri*_*ris 4

当涉及到处理“禁止”字符时,我宁愿过于谨慎并禁止/替换所有可能在任何文件系统上导致问题的“特殊”字符。

即使技术上允许,有时这些字符也会引起奇怪的情况。

例如,我们遇到了一个问题:PDF 文件已(成功)写入 SAN,但是当我们通过 Web 服务器从该位置提供服务时,当我们将 PDF 嵌入到 HTML 页面中时,某些字符会导致出现问题。正在 Firefox 中渲染。直接访问PDF就可以了,其他浏览器也可以。Firefox 和 Adob​​e Reader 交互方式出现一些奇怪的错误。

摘要:文件名中的“特殊”字符 -> 等待发生的奇怪错误

最终,唯一确定的方法是使用白名单。

  • +1 在大多数 UNIX-y 文件系统上,唯一禁止的字符是“/”和空字符“\0”。 (2认同)