繁体   English   中英

如何在Java中验证文件名

[英]How to validate a file name in java

我正在处理coverity问题,我需要使用java中的regEx验证文件名。 在我的应用程序中,支持.pdf,.txt,csv等。 我的文件名从user中获取为xxx.txt。 我想用正确的扩展名格式验证我的文件名,并且不包含除点(例如.txt)以外的任何特殊字符。

filePath = properties.getProperty("DOCUMENT.LIBRARY.LOCATION");
String fileName = (String) request.getParameter("read");

仅当文件路径完成正确的验证后,以下代码才可以工作。

filePath += "/" + fileName;

看看String.endsWith()方法

if (fileName.endsWith(".pdf")) {
   // do something
}

或使用方法String.matches()

fileName.matches("\\.(pdf|txt|csv)$") 

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

fileName.matches("[-_. A-Za-z0-9]+\\.(pdf|txt|csv)");

这样可以确保文件名仅包含一个或多个-,_,PERIOD,SPACE或字母数字字符,并在文件名末尾紧跟.pdf,.txt或.csv中的一个。 您的系统可能允许文件名中包含其他字符,如果需要,可以将其添加到此列表中。 另一种不太安全的方法是防止出现“坏”字符,例如:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM