如何在java中验证文件名

如何在java中验证文件名,java,Java,我正在处理一个coverity问题,需要验证文件名 在java中使用正则表达式。在my application support.pdf、.txt、csv等中。我的 从用户处获取的文件名为xxx.txt。我想验证我的文件名 具有正确的扩展名格式,不包括任何特殊字符 大于点(如txt) 只有当文件路径完成了正确的验证,下面的代码才能正常工作 filePath += "/" + fileName; 看一看方法 或者使用这个方法 这是一个糟糕的答案,因为它只验证文件名以所需的扩展名结尾,而没有按照原始

我正在处理一个coverity问题,需要验证文件名 在java中使用正则表达式。在my application support.pdf、.txt、csv等中。我的 从用户处获取的文件名为xxx.txt。我想验证我的文件名 具有正确的扩展名格式,不包括任何特殊字符 大于点(如txt)

只有当文件路径完成了正确的验证,下面的代码才能正常工作

filePath += "/" + fileName;
看一看方法

或者使用这个方法


这是一个糟糕的答案,因为它只验证文件名以所需的扩展名结尾,而没有按照原始问题中的要求验证文件名的其余部分。像这样的东西会更好:

fileName.matches("[-_. A-Za-z0-9]+\\.(pdf|txt|csv)");
这可确保文件名仅包含一个或多个-、、、句点、空格或字母数字字符,文件名末尾紧跟.pdf、.txt或.csv中的一个字符。您的系统可能允许文件名中包含其他字符,如果需要,您可以将它们添加到此列表中。另一种不太安全的方法是防止“坏”字符,例如:

fileName.matches("[^/\]+\\.(pdf|txt|csv)");

它只是防止/或\字符出现在文件名中所需的结尾扩展名之前。但这并不能防止其他潜在的危险字符,例如空字节。

您可以使用正则表达式。据我所知。String#matches()匹配整个内容,因此您必须执行
+(pdf | txt | csv)
。如果我错了,请纠正我。
String#matches()
匹配正则表达式,我编写的正则表达式匹配任何带有
(点字符)的字符串,列表中的一个扩展名
(pdf | txt | csv)
,美元符号(
$
)匹配行尾。看看这个,其实我是对的,只是继续检查。您也可以查看一下,以确定此字符串是否与给定的正则表达式匹配。正则表达式不必与整个字符串进行强匹配。@我编写的正则表达式是为了验证文件名,我们假设文件名应该是以特定扩展名结尾的字符串。这就是我写的正则表达式。
fileName.matches("\\.(pdf|txt|csv)$") 
fileName.matches("[-_. A-Za-z0-9]+\\.(pdf|txt|csv)");
fileName.matches("[^/\]+\\.(pdf|txt|csv)");