代码之家  ›  专栏  ›  技术社区  ›  Gnoupi

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

  •  5
  • Gnoupi  · 技术社区  · 15 年前

    other question 已经覆盖了。

    在Java中,有没有一种方法可以检索这个禁止字符列表,这取决于系统(有点像检索换行符)?或者我只能自己写清单,检查系统?


    编辑:

    我使用一个默认名称,来自一些数据(对它们的内容没有真正的控制),这个名称被赋予JFileChooser,作为要使用的默认文件名(与 setSelectedFile()

    这些默认名称有时以“mm/dd/yy”格式的日期结束,默认名称中只保留“yy”,因为“/”是禁止的。因此,检查异常实际上不是一个选项,因为文件本身甚至还没有创建。

    编辑bis: 嗯,这让我觉得,如果JFileChooser正在截断名称,它可能有权访问这样的字符列表,进一步检查可能会很有趣。

    编辑文本: 好的,从JFileChooser检查源代码显示了一些非常简单的东西。对于文本字段,它使用file.getName()。它实际上并不检查无效字符,只是将“/”作为路径分隔符,只保留结尾“实际文件名”。其他被禁止的字符实际上会通过。

    4 回复  |  直到 8 年前
        1
  •  4
  •   Kris    15 年前

    即使技术上允许,有时这些角色也会造成怪异。

    例如,我们遇到了一个问题,即PDF文件被写入(成功地)到SAN,但是当通过web服务器从该位置提供时,当我们将PDF嵌入Firefox中呈现的HTML页面时,一些字符会导致问题。如果可以直接访问PDF,在其他浏览器中也可以。Firefox和AdobeReader的交互方式出现了一些奇怪的错误。

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

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

        2
  •  2
  •   Michael Borgwardt    15 年前

    在创建文件时,使用某些“禁止字符”只是可能出错的事情之一(其他的是访问权限以及文件名和路径名长度)。

    如果在实际尝试创建文件之前无法捕获其他文件,那么在早期尝试捕获其中一些文件是没有意义的。只要处理好异常。

        3
  •  2
  •   Lior    15 年前

    你用过吗 文件.getCanonicalPath )?

        4
  •  -2
  •   grahamrb    15 年前

    查看此链接以获取有关如何获取运行应用程序的操作系统的信息。基本上,您需要使用System.getProperty(“os.name”)并执行equals()或contains()来查找操作系统。

    资料来源: http://www.mkyong.com/java/how-to-detect-os-in-java-systemgetpropertyosname/