java用正則方法驗證文件名是否合法

Java中用到文件操做時,常常要驗證文件名是否合法. 用File類的createNewFile()方法的確很管用.但當要批量驗證時,效率上就會有問題.正則匹配的開銷比建立文件少了不少. 那麼一個合法的文件(Win下)應該符合以下規則:java

1.文件名不能爲空,空在這裏有兩個意思:get

文件名(包括擴展名)長度爲0或僅由空字符組成(包括\t\b等不可見的轉義字符) 文件名和擴展名不能同時爲空.但實際上咱們能夠用程序建立出相似.project,..txt等形式的文件,但卻建立不出相似abc.的文件 2.文件名中不能包含/:*?"<>|中的任意字符效率

  1. 文件名(包括擴展名)的長度不得大於255個字符 事實上形如".."(不包含引號,下同)的文件也不能被建立. 不合法的文件還有相似" aa", "aa ", "aa."(會被建立爲"aa",也把它算做不合法),"a\ta"(\t爲製表符等不可見字符(除空格外))

因而咱們獲得了文件名命名規則的更詳細規定:擴展

1.首尾不能有空字符(空格、製表符、換頁符等空白字符的其中任意一個),文件名尾不能爲.號file

2.文件名和擴展名不能同時爲空程序

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

4.文件名(包括擴展名)的長度不得大於255個字符命名

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

出 現控制字符其實也算不合法,但由於狀況太複雜,就不作判斷了。 因而有以下匹配 首字符: [^\s\/:*?"<>|]尾字符: [^\s\/:*?"<>|.]其它字符: (\x20|[^\s\/:*?"<>|])* \s 只能匹配下面六種字符(via: java.util.regex.Pattern): 半角空格( ) 水平製表符(\t) 豎直製表符 回車(\r) 換行(\n) 換頁符(\f)語言

用Java語言實現:

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

相關文章
相關標籤/搜索