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

时间:2010-03-23 09:32:01

标签: java filenames

对于文件名和目录名,有一些受限制的字符(甚至是Windows中的完整文件名)。这个other question已经涵盖了它们。

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


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

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

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

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

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

4 个答案:

答案 0 :(得分:4)

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

即使技术上允许,有时这些角色也会引起奇怪。

例如,我们遇到了一个问题,即PDF文件正在被写入(成功)到SAN,但是当通过Web服务器从该位置提供服务时,一些字符会在我们将PDF嵌入到在Firefox中呈现的HTML页面。如果直接访问PDF就可以了,在其他浏览器中也没问题。关于Firefox和Adobe Reader如何互动的一些奇怪错误。

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

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

答案 1 :(得分:2)

拥有某些“禁用字符”只是创建文件时可能出错的许多内容之一(其他是访问权限以及文件和路径名长度)。

如果在实际尝试创建文件之前有其他人无法捕获,那么尝试及早捕获其中一些内容并没有多大意义。只需正确处理异常。

答案 2 :(得分:2)

您是否尝试过使用 File.getCanonicalPath 并将其与原始文件名(或从 getAbsolutePath 中检索到的任何内容)进行比较?

这不会给你实际的字符,但它可以帮助你确定这是否是你正在运行的操作系统中的有效文件名。

答案 3 :(得分:-2)

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

令人厌倦的是,了解操作系统并不一定会告诉您正在使用的基础文件系统,例如Mac可以读写FAT32文件系统。

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