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


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

1.文件名不能為空,空在這里有兩個意思: 

  1. 文件名(包括擴展名)長度為0或僅由空字符組成(包括\t\b等不可見的轉義字符)
  2. 文件名和擴展名不能同時為空.但實際上我們可以用程序創建出類似.project,..txt等形式的文件,但卻創建不出類似abc.的文件 

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

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

於是我們得到了文件名命名規則的更詳細規定: 

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

2.文件名和擴展名不能同時為空 

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

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

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

出 現控制字符其實也算不合法,但因為情況太復雜,就不做判斷了。 於是有如下匹配 首字符: [^\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\\\\/:\\*\\?\\\"<>\\|](\\x20|[^\\s\\\\/:\\*\\?\\\"<>\\|])*[^\\s\\\\/:\\*\\?\\\"<>\\|\\.]$"); }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM