java用正则方法验证文件名是否合法

摘要:
“|3中的任何字符。文件名的长度不得超过255个字符。事实上,无法创建形状为”..“的文件。非法文件也有类似的字符,如”aa“、”aa“和”aa?

Java中用到文件操作时,经常要验证文件名是否合法. 用File类的createNewFile()方法的确很管用.但当要批量验证时,效率上就会有问题.正则匹配的开销比创建文件少了很多. 那么一个合法的文件(Win下)应该符合如下规则: 

1.文件名不能为空,空在这里有两个意思: 

  1. 文件名(包括扩展名)长度为0或仅由空字符组成(包括 等不可见的转义字符)
  2. 文件名和扩展名不能同时为空.但实际上我们可以用程序创建出类似.project,..txt等形式的文件,但却创建不出类似abc.的文件 

2.文件名中不能包含/:*?"<>|中的任意字符 

3. 文件名(包括扩展名)的长度不得大于255个字符 事实上形如".."(不包含引号,下同)的文件也不能被创建. 不合法的文件还有类似" aa", "aa ", "aa."(会被创建为"aa",也把它算作不合法),"a a"( 为制表符等不可见字符(除空格外)) 

于是我们得到了文件名命名规则的更详细规定: 

1.首尾不能有空字符(空格、制表符、换页符等空白字符的其中任意一个),文件名尾不能为.号

2.文件名和扩展名不能同时为空 

3.文件名中不能包含/:*?"<>|中的任意字符 

4.文件名(包括扩展名)的长度不得大于255个字符 

5.在1.的条件下,文件名中不能出出现除空格符外的任意空字符.

出 现控制字符其实也算不合法,但因为情况太复杂,就不做判断了。 于是有如下匹配 首字符: [^s\/:*?"<>|]尾字符: [^s\/:*?"<>|.]其它字符: (x20|[^s\/:*?"<>|])* s 只能匹配下面六种字符(via: java.util.regex.Pattern): 半角空格( ) 水平制表符( ) 竖直制表符 回车( ) 换行( ) 换页符(f) 

用Java语言实现:

public static boolean isValidFileName(String fileName) { if (fileName == null || fileName.length() > 255) return false; else return fileName.matches("[^\s\\/:\*\?\"<>\|](\x20|[^\s\\/:\*\?\"<>\|])*[^\s\\/:\*\?\"<>\|\.]$"); }

免责声明:文章转载自《java用正则方法验证文件名是否合法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇当共享和访问出现问题时Android中动态设置GridView的列数、列宽和行高下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

nginx location详解

Nginx的Location匹配   Location根据类型分为两种:普通配置和正则匹配   一、 普通配置   普通location根据使用方法又分为两种,格式如下: 1.  location  / { 命令序列 }         解释:括号中定义的表示对当前路径及子路径下的所有对象有效。“优先级最低” 用户所有的请求都能被它匹配到。        ...

正则校验:微信号,qq号,邮箱

java判断微信号、手机、名字的正则表达 - willgos - 博客园https://www.cnblogs.com/solossl/p/5813106.html 微信号正则校验,qq正则,邮箱正则 - qq_29091239的博客 - CSDN博客https://blog.csdn.net/qq_29091239/article/details/800...

高级正则实例

如何学好正则,一直是我苦恼的事情,有时候我自己的写的正则,自己也不太明白所以然,抱着试试的态度 但是我真的很想学好,这里我都会以实例出来,对每一道正则都写上自己的理解(基础部分我就不写,尽量写一些小细节的点) 部分会参考我看的<<正则指引>> 多选 竖线| 分隔多选,但是|的优先级特别低,可以用括号把他包起来 复杂些|简单写...

shell学习笔记之正则表达式

一:知识背景 sed -i ' /PermitRootLogin no/ s/^.*$/PermitRootLogin yes/g' /etc/ssh/sshd_config 正则表达式的作用实在太强大了!!!! linux三剑客grep、awk、sed的强大是和正则分不开的,正则说到最基本的就是:从文件或者命令输出过滤文本。正则就是一些特殊字符串的集合...

Mysql中文检索匹配与正则

今天在用sql模糊查询包含字母d的时候,发现一些不包含此字母的也被查询出来了: SELECT * FROM custom WHERE custom_realname LIKE '%d%' 查询了一下,发现以下说明: (最后修改为: SELECT * FROM custom WHERE custom_realname LIKE BINARY '%d%...

js正则匹配获取文件名

//获取文件名,不带后缀 var file_name=file_path.replace(/(.*/)*([^.]+).*/ig,"$2"); //获取文件后缀 1.var FileExt=file_path.replace(/.+./,""); 2.var fileExtension = file_path.substring(file_path.l...