精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java 如何驗(yàn)證文件名的有效性?

開發(fā) 前端
我們從java.io包開始,它為我們解決了大部分的系統(tǒng)限制,但執(zhí)行了額外的I/O動(dòng)作,可能需要一些權(quán)限。然后我們檢查了NIO2 API,它是最快的解決方案,但有文件名長(zhǎng)度檢查的限制。

大家好,我是指北君。

在本文中,我們將討論使用 Java 驗(yàn)證一個(gè)給定的字符串是否具有操作系統(tǒng)的有效文件名的不同方法。我們可以根據(jù)限制的字符或長(zhǎng)度限制來(lái)檢查該值。

我們將只關(guān)注核心解決方案,不使用任何外部依賴。我們將使用JDK的java.io和NIO2包來(lái)實(shí)現(xiàn)我們驗(yàn)證方法。。

使用java.io.File

讓我們從第一個(gè)例子開始,使用 java.io.File 類。在這個(gè)解決方案中,我們需要用一個(gè)給定的字符串創(chuàng)建一個(gè)File實(shí)例,然后在本地磁盤上創(chuàng)建一個(gè)文件。

public static boolean validateStringFilenameUsingIO(String filename) throws IOException {
File file = new File(filename);
boolean created = false;
try {
created = file.createNewFile();
return created;
} finally {
if (created) {
file.delete();
}
}
}

當(dāng)給定的文件名不正確時(shí),它會(huì)拋出一個(gè)IOException。讓我們注意,由于里面的文件創(chuàng)建,這個(gè)方法需要給定的文件名字符串沒有對(duì)應(yīng)存在的文件。

我們知道,不同的文件系統(tǒng)有自己的文件名限制。通過(guò)使用 java.io.File 方法,我們不需要指定每個(gè)操作系統(tǒng)的規(guī)則,因?yàn)镴ava自動(dòng)為我們解決了這個(gè)問題。

然而,我們需要?jiǎng)?chuàng)建一個(gè)假文件。當(dāng)我們成功后,我們必須記得在最后刪除它。此外,我們必須確保我們有適當(dāng)?shù)臋?quán)限來(lái)執(zhí)行這些操作。任何失敗也可能導(dǎo)致IOException,所以也最好檢查一下錯(cuò)誤信息。

assertThatThrownBy(() -> validateStringFilenameUsingIO("javanorth?.txt"))
.isInstanceOf(IOException.class)
.hasMessageContaining("Invalid file path");

使用 NIO2 API

我們知道java.io包有很多缺點(diǎn),因?yàn)樗窃贘ava的第一個(gè)版本中創(chuàng)建的。NIO2 API是java.io包的后繼者,它帶來(lái)了許多改進(jìn),這也大大簡(jiǎn)化了我們之前的解決方案。

public static boolean validateStringFilenameUsingNIO2(String filename) {
Paths.get(filename);
return true;
}

我們的功能現(xiàn)在被精簡(jiǎn)了,所以它是進(jìn)行這種測(cè)試的最快方式。我們不創(chuàng)建任何文件,所以我們不需要有任何磁盤權(quán)限,也不需要在測(cè)試后執(zhí)行清理。

無(wú)效的文件名拋出 nvalidPathException,它擴(kuò)展了RuntimeException。這個(gè)的錯(cuò)誤信息也包含了比之前更多的細(xì)節(jié)。

assertThatThrownBy(() -> validateStringFilenameUsingNIO2(filename))
.isInstanceOf(InvalidPathException.class)
.hasMessageContaining("character not allowed");

但是這個(gè)解決方案有一個(gè)嚴(yán)重的缺點(diǎn),與文件系統(tǒng)的限制有關(guān)。Path類可能表示帶有子目錄的文件路徑。與第一個(gè)例子不同,這個(gè)方法沒有檢查文件名字符的溢出限制。讓我們用Apache Commons的randomAlphabetic()方法生成的五百個(gè)字符的隨機(jī)String來(lái)檢查。

String filename = RandomStringUtils.randomAlphabetic(500);
assertThatThrownBy(() -> validateStringFilenameUsingIO(filename))
.isInstanceOf(IOException.class)
.hasMessageContaining("File name too long");

assertThat(validateStringFilenameUsingNIO2(filename)).isTrue();

為了解決這個(gè)問題,我們應(yīng)該像以前一樣,創(chuàng)建一個(gè)文件并檢查結(jié)果。

自定義的實(shí)現(xiàn)

最后,讓我們嘗試實(shí)現(xiàn)我們自己的自定義函數(shù)來(lái)測(cè)試文件名。我們還將嘗試避免任何I/O功能,只使用核心的Java方法。

這類解決方案提供了更多的控制權(quán),允許我們實(shí)現(xiàn)我們自己的規(guī)則。然而,我們必須考慮不同系統(tǒng)的許多額外限制。

使用String.contains

我們可以使用String.contains()方法來(lái)檢查給定的String是否包含任何禁止的字符。首先,我們需要手動(dòng)指定一些示例值。

public static final Character[] INVALID_WINDOWS_SPECIFIC_CHARS = {'"', '`', '<', '>', '?', '|'};
public static final Character[] INVALID_UNIX_SPECIFIC_CHARS = {'\000'};

在我們的例子中,讓我們只關(guān)注這兩個(gè)操作系統(tǒng),Windows的文件名比UNIX的限制更多。另外,一些的空白字符可能會(huì)有問題。

在定義了受限制的字符集之后,讓我們來(lái)確定當(dāng)前的操作系統(tǒng)。

public static Character[] getInvalidCharsByOS() {
String os = System.getProperty("os.name").toLowerCase();
if (os.contains("win")) {
return INVALID_WINDOWS_SPECIFIC_CHARS;
} else if (os.contains("nix") || os.contains("nux") || os.contains("mac")) {
return INVALID_UNIX_SPECIFIC_CHARS;
} else {
return new Character[]{};
}
}

而現(xiàn)在我們可以用它來(lái)測(cè)試給定的值。

public static boolean validateStringFilenameUsingContains(String filename) {
if (filename == null || filename.isEmpty() || filename.length() > 255) {
return false;
}
return Arrays.stream(getInvalidCharsByOS())
.noneMatch(ch -> filename.contains(ch.toString()));
}

如果我們定義的任何字符不在給定的文件名中,這個(gè)Stream謂詞返回真。此外,我們還實(shí)現(xiàn)了對(duì)null值和不正確長(zhǎng)度的支持。

正則表達(dá)式模式匹配

我們也可以在給定的String上直接使用正則表達(dá)式。讓我們來(lái)實(shí)現(xiàn)一個(gè)只接受字母數(shù)字和點(diǎn)字符的模式,其長(zhǎng)度不超過(guò)255。

public static final String REGEX_PATTERN = "^[A-za-z0-9.]{1,255}$";

public static boolean validateStringFilenameUsingRegex(String filename) {
if (filename == null) {
return false;
}
return filename.matches(REGEX_PATTERN);
}

現(xiàn)在,我們可以根據(jù)先前準(zhǔn)備的模式測(cè)試給定的值。我們還可以輕松地修改模式。在這個(gè)例子中,我們跳過(guò)了操作系統(tǒng)的檢查功能。

總結(jié)

在這篇文章中,我們集中討論了文件名及其限制。我們介紹了不同的算法,用Java檢測(cè)無(wú)效的文件名。

我們從java.io包開始,它為我們解決了大部分的系統(tǒng)限制,但執(zhí)行了額外的I/O動(dòng)作,可能需要一些權(quán)限。然后我們檢查了NIO2 API,它是最快的解決方案,但有文件名長(zhǎng)度檢查的限制。

最后,我們實(shí)現(xiàn)了我們自己的方法,不使用任何I/O API,但需要自定義實(shí)現(xiàn)文件系統(tǒng)規(guī)則。

責(zé)任編輯:武曉燕 來(lái)源: Java技術(shù)指北
相關(guān)推薦

2024-07-09 07:54:26

2023-09-05 07:17:23

2021-03-08 10:48:04

AI

2023-12-08 16:32:35

GenAI人工智能AI

2010-07-19 15:07:23

SQL Server評(píng)

2009-06-29 09:57:05

Unix

2025-05-21 09:43:26

2021-09-07 06:40:26

狀態(tài)機(jī)識(shí)別地址

2015-03-24 11:04:58

2016-07-26 11:21:53

2023-07-03 09:49:49

2012-12-24 15:00:56

sis塞班

2024-07-08 08:18:45

2010-04-30 16:24:51

2010-07-28 16:40:38

2023-06-06 12:11:51

2021-03-16 12:42:42

FreeDOS開源

2018-03-28 17:51:24

LinuxUnix

2012-10-09 16:37:20

FastDFS

2023-08-24 08:00:00

開發(fā)Java可觀察性
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

7777精品伊人久久久大香线蕉 | 午夜精品一二三区| 欧美va天堂| 亚洲精品国产欧美| 依人在线免费视频| 黄色污污视频在线观看| 久久先锋影音av鲁色资源网| 国产日韩欧美夫妻视频在线观看 | 欧美日本精品| 成人福利影视| 国产麻豆日韩欧美久久| 136fldh精品导航福利| 国产成人精品视频免费| 国内精品国产成人国产三级粉色| 欧美性一级生活| 日韩成人手机在线| 成年人在线观看| 成人av先锋影音| 成人网在线免费看| 国产污视频网站| 欧美日本久久| 日韩在线观看你懂的| 国产一级伦理片| 国产一区二区久久久久| 在线看国产日韩| 香港三级日本三级a视频| av播放在线观看| 菠萝蜜视频在线观看一区| 成人有码视频在线播放| 日韩熟女一区二区| 国产精品日本| 久久久人成影片一区二区三区观看| 青青草自拍偷拍| 九九在线高清精品视频| 亚洲精品在线三区| 超级砰砰砰97免费观看最新一期| 精品国产欧美日韩一区二区三区| 红桃av永久久久| www.男人天堂网| 久久精品视频免费看| 国产欧美日韩综合| 欧美日韩高清免费| 天天操天天干天天爽| 国产aⅴ精品一区二区三区色成熟| 国产在线观看精品| 波多野结衣在线电影| 久久精品九九| 欧美一区二区大胆人体摄影专业网站| 国产精品6666| 亚洲激情不卡| 久久人人97超碰精品888| 久久久香蕉视频| 欧美视频成人| 欧美精品精品精品精品免费| 免费在线观看亚洲| 国产精品a久久久久| 欧美日韩福利视频| 国产一级在线观看视频| 伊人久久久大香线蕉综合直播| 久久这里有精品| 久久久久久久久久网站| 激情欧美一区| 97不卡在线视频| 一级黄色大片视频| 七七婷婷婷婷精品国产| 国产美女精品免费电影| 国产又粗又猛又爽| 国产在线播放一区三区四| 91久久精品日日躁夜夜躁国产| 国产一区二区麻豆| 国产91综合网| 美女一区视频| 日韩精品毛片| 一区二区高清在线| 一二三四视频社区在线| 都市激情亚洲一区| 欧美色综合影院| 五月天开心婷婷| www.国产精品一区| 亚洲欧美日韩精品久久奇米色影视| 粉嫩av蜜桃av蜜臀av| 欧美性感美女一区二区| 久久av中文字幕| 日本视频www| 日韩高清一级片| 91在线观看网站| 亚洲av电影一区| 中文在线资源观看网站视频免费不卡| 国产成年人在线观看| 丁香花在线高清完整版视频| 日韩欧美中文免费| 中文字幕资源在线观看| 黄色成人美女网站| 最近2019年中文视频免费在线观看| 日本精品在线免费观看| 日韩视频一区| 91精品久久久久久久久久久 | 日韩三级视频在线观看| 国产ts丝袜人妖系列视频| 久久精品国产www456c0m| 久久久爽爽爽美女图片| 亚洲最新av网站| 99久久免费视频.com| 一本一道久久a久久精品综合 | 亚洲h在线观看| 一路向西2在线观看| 国产精品久av福利在线观看| 中文字幕少妇一区二区三区| 久久久久无码精品国产| 日本中文在线一区| 九九九久久久| av网站导航在线观看免费| 色综合天天综合狠狠| 日本成人在线免费| 久久国产亚洲精品| 欧美亚洲午夜视频在线观看 | 亚洲欧美国产一本综合首页| 日本妇女毛茸茸| 美女性感视频久久| 久久96国产精品久久99软件| 在线免费观看污| 欧美亚洲精品一区| 欧美亚一区二区三区| 在线高清一区| 99久热re在线精品996热视频| 不卡在线视频| 色综合天天综合狠狠| 国产a级黄色片| 欧美久久99| 91性高湖久久久久久久久_久久99| 国产色a在线| 日韩欧美中文在线| 人妻av一区二区| 亚洲国产91| 99精品99久久久久久宅男| 老司机av在线免费看| 欧美三级三级三级爽爽爽| 成人性生交大免费看| 亚洲欧美日韩在线观看a三区| 国产精品av一区| 色呦呦呦在线观看| 欧美一区二区成人6969| 黑鬼狂亚洲人videos| 国产一区二区三区不卡在线观看| 在线观看成人一级片| 色噜噜成人av在线| 日韩在线视频线视频免费网站| 涩涩视频在线观看| 久久精品人人做人人爽人人| 日韩在线xxx| 国产乱码精品一区二区三区四区| 日韩av电影在线播放| 久草在线网址| 欧美主播一区二区三区| 91视频免费看片| 六月丁香综合在线视频| 免费成人进口网站| www.久久久久爱免| 久久91精品国产| 欧美一级淫片免费视频魅影视频| 亚洲va欧美va人人爽| 国产精品无码网站| 天堂久久久久va久久久久| 五月婷婷综合色| 日韩综合久久| 欧美黑人性猛交| 亚州精品国产精品乱码不99按摩| 一本到三区不卡视频| 波多野结衣一二三四区| 激情综合色综合久久| 国产一级做a爰片久久毛片男| 精品国产影院| 国产精品成人久久久久| 91美女视频在线| 日韩一区二区麻豆国产| 国产大片免费看| 北岛玲一区二区三区四区| 免费在线观看亚洲视频| 欧美美女一区| 亚洲一区二区三区xxx视频| 男人添女人下部高潮视频在线观看 | 国产精品午夜在线观看| 国产又粗又长又爽又黄的视频| 国产精品videosex极品| 欧美激情视频一区二区三区| 激情久久一区二区| 国内揄拍国内精品| 国产天堂在线| 精品少妇一区二区三区| jizz国产在线观看| 亚洲激情图片qvod| 三上悠亚ssⅰn939无码播放| 免费精品99久久国产综合精品| 大地资源网在线观看免费官网| 日韩深夜福利| 成人网址在线观看| 新片速递亚洲合集欧美合集| 九九热最新视频//这里只有精品| 日韩一二三四| 欧美一区二区在线视频| 久久久久久久久黄色| 亚洲最大成人综合| 成人在线观看免费高清| 成人黄色a**站在线观看| 免费国产成人av| 亚洲大胆视频| 亚洲午夜精品福利| 亚洲制服欧美另类| 成人自拍视频网站| 成人一级视频| 日本欧美黄网站| heyzo在线欧美播放| 日韩在线视频观看| 国产中文字幕在线看| 精品va天堂亚洲国产| 97超碰人人草| 在线观看亚洲专区| 亚洲精品男人的天堂| 一区二区三区国产精品| 国产精品www爽爽爽| 99国产精品久久久久| 欧美日韩一区二区区别是什么 | 深夜视频在线观看| 激情图区综合网| 国产一级不卡毛片| 免费看亚洲片| 国产网站免费在线观看| 欧美激情视频一区二区三区免费| 亚洲一区二区三区加勒比| 女人丝袜激情亚洲| 久久久久se| 久久精品凹凸全集| 国产伦一区二区三区色一情| 精品视频在线观看网站| 成人精品一区二区三区| 国产精品亲子伦av一区二区三区| 日韩免费av在线| 成人爱爱网址| 日本精品久久久久久久| 在线天堂资源www在线污| 97精品国产97久久久久久免费| 国产天堂在线播放视频| 欧美日韩国产成人高清视频| 91麻豆免费在线视频| xvideos亚洲人网站| 日本在线免费| 欧美成人在线免费| 影音先锋在线视频| 欧美激情伊人电影| www欧美xxxx| 97在线视频免费看| 天堂√8在线中文| 日韩av第一页| 91国拍精品国产粉嫩亚洲一区| 国产精品久久精品| 欧美成人毛片| 亚洲一区二区少妇| 亚洲综合网站| 国产在线精品一区二区三区| 婷婷综合电影| 五月天久久综合网| 亚洲成人av| 青青草成人免费在线视频| 亚洲欧美卡通另类91av| 国产精品入口免费软件| 免费在线观看精品| 香蕉视频xxxx| av成人老司机| 毛片aaaaaa| 亚洲精品免费在线观看| 国产va在线播放| 五月激情丁香一区二区三区| 麻豆成人免费视频| 欧美区一区二区三区| 亚洲AV无码精品国产| 亚洲第一中文字幕在线观看| 久久av少妇| 九九精品在线视频| 日韩激情电影| 国产精品网红福利| 一区中文字幕电影| 欧美日韩国产一二| 香蕉国产精品| 国产原创中文在线观看 | 天堂在线资源库| 亚洲午夜精品久久久久久性色| 日本中文在线| 午夜精品在线视频| 成人在线视频免费| 国产精品区一区| 欧美丝袜激情| xxxx18hd亚洲hd捆绑| 美国欧美日韩国产在线播放| 蜜臀视频在线观看| 中文字幕+乱码+中文字幕一区| 国产一级片网址| 欧美视频中文一区二区三区在线观看 | 欧美私人网站| 91av在线网站| 美女久久精品| 日韩中文字幕av在线| 欧美亚洲不卡| 亚洲激情在线看| 91啪九色porn原创视频在线观看| 国产精品成人69xxx免费视频| 婷婷久久综合九色综合绿巨人| 国产精品久久久久久免费免熟| 亚洲精品www| 中文在线免费| 国产精品免费视频久久久| 九九热hot精品视频在线播放| 亚洲最新免费视频| 久久亚洲美女| 亚洲调教欧美在线| 一区二区三区产品免费精品久久75| 最近中文在线观看| 国产丝袜一区视频在线观看| 久久电影网站| 97神马电影| 亚洲精品成人| www.超碰97.com| 久久精品水蜜桃av综合天堂| 国产奶水涨喷在线播放| 精品久久五月天| 综合图区亚洲| 91九色视频导航| 色婷婷亚洲mv天堂mv在影片| 国产免费999| 久久毛片高清国产| 永久免费看片在线播放| 精品久久久久一区| 青草av在线| 超碰97人人人人人蜜桃| 欧美成人一品| 午夜影院免费观看视频| 日韩毛片视频在线看| 一区二区 亚洲| 色yeye香蕉凹凸一区二区av| 日本一区二区电影| 先锋影音网一区| 日韩av在线播放中文字幕| 国产男男chinese网站| 欧美日韩亚洲精品内裤| 亚洲色图21p| 欧美性视频网站| 精品在线手机视频| av免费中文字幕| 国产性天天综合网| 最新中文字幕免费| 最近2019中文字幕第三页视频| 成人国产精品| 中文字幕一区二区三区在线乱码| 蜜桃视频一区二区| 91嫩草丨国产丨精品| 日韩欧美在线网站| 成人影音在线| 久久久久九九九| 日韩精品一二三区| 中文国语毛片高清视频| 5566中文字幕一区二区电影| av大全在线| 国产亚洲精品自在久久| 国产九九精品| 一二三四国产精品| 91精品欧美久久久久久动漫| 在线观看的网站你懂的| 韩国一区二区三区美女美女秀| 国产精品婷婷| 香蕉成人在线视频| 欧美成人video| 免费毛片b在线观看| 色一情一区二区三区四区| 久久99精品久久久久婷婷| 久草视频在线资源站| 亚洲精品一区二区三区不| 国产91精品在线| 青青青在线观看视频| 久久婷婷综合激情| 国产一区二区三区四区视频| 欧美激情一级欧美精品| 国产成人精品一区二区免费看京| 日韩理论片网站| 亚洲AV无码一区二区三区少妇| 性色av一区二区三区红粉影视| 红桃成人av在线播放| 原创真实夫妻啪啪av| 精品久久久久久中文字幕一区奶水 | 亚洲欧美综合图区| 97久久中文字幕| a在线视频观看| 日韩美女视频19| 深夜福利视频一区| 成人精品视频99在线观看免费| 亚洲国产影院| 三级影片在线观看| 日韩第一页在线| 久久精品一级| 国内自拍视频一区| 亚洲成人免费观看| 日本在线观看www|