精品欧美一区二区三区在线观看 _久久久久国色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)

91精品久久久久久| 日韩中文av在线| 免费观看日韩毛片| 77777影视视频在线观看| 黄页视频在线91| 性欧美在线看片a免费观看| 欧美老熟妇乱大交xxxxx| 久久久久黄色| 午夜私人影院久久久久| 亚洲蜜桃av| 日本久久一级片| 美女脱光内衣内裤视频久久网站 | 182tv在线播放| 91丨九色丨蝌蚪丨老版| 成人免费淫片视频软件| 日本一级一片免费视频| 97视频精品| 日韩av网站在线| 色偷偷中文字幕| 成人黄色免费短视频| 一区二区三区蜜桃| 亚洲精品一卡二卡三卡四卡| 亚洲精品字幕在线| 精品无人码麻豆乱码1区2区| 欧美综合第一页| 免费在线视频一区二区| 手机在线电影一区| 亚洲欧美一区二区三区在线| 欧美日韩一区二区区别是什么 | 91免费观看网站| 亚洲另类在线观看| 亚洲视频免费| 欧美猛少妇色xxxxx| 成人做爰69片免网站| 久久婷婷国产| 欧美精品一区二区在线播放| www.欧美激情.com| 黄色欧美视频| 在线观看视频一区二区| 97av视频在线观看| 91超碰国产在线| 亚洲黄色小视频| 女女同性女同一区二区三区按摩| 黄色av网址在线免费观看| 成人看片黄a免费看在线| 91免费视频国产| 国产精品高潮呻吟av| 日韩av一区二区三区| 欧美一区二区影院| 日日夜夜综合网| 亚洲美女少妇无套啪啪呻吟| 欧美国产日韩一区二区在线观看 | 国产精品久久久久久久久免费看 | 欧美日本国产视频| 亚洲色图久久久| 最新日韩一区| 欧美午夜电影在线播放| 国内自拍视频网| 国产第一亚洲| 欧美人妖巨大在线| 激情图片中文字幕| 久久精品九色| 欧美岛国在线观看| 国产污在线观看| 成人另类视频| 日韩精品视频在线观看免费| 免费观看av网站| 欧洲毛片在线视频免费观看| 亚洲天堂网站在线观看视频| 亚洲天堂岛国片| 日韩av自拍| 欧美wwwxxxx| 中文字幕一区二区三区手机版 | 日韩美女毛茸茸| 91丨九色丨海角社区| 奇米在线7777在线精品| 成人在线精品视频| 韩国av在线免费观看| 99热国产精品| 五月婷婷综合色| sm国产在线调教视频| 亚洲一区二区高清| 国产激情在线观看视频| 日韩成人精品一区二区三区| 日韩色在线观看| 国产美女视频免费观看下载软件| 亚洲免费毛片| 久久中文字幕视频| 国产精品一区二区三区四| 奇米精品一区二区三区在线观看| 91日韩在线视频| 亚洲欧美色视频| 国产精品久久久久久久久搜平片| 欧美日韩一区二区三区电影| 国内激情视频在线观看| 欧美性生活大片视频| 亚洲丝袜在线观看| 视频精品在线观看| 欧美成人午夜影院| 天天射天天干天天| 国产成人亚洲综合a∨猫咪| 欧美极品一区| 动漫一区在线| 在线观看日韩一区| 久草免费资源站| 日本不卡高清| 国产91精品不卡视频| 97人妻精品一区二区三区视频| av网站免费线看精品| 一本一本a久久| 九色porny视频在线观看| 欧美男人的天堂一二区| 黄色国产在线观看| 欧美午夜一区| 国产女精品视频网站免费| 日日躁夜夜躁白天躁晚上躁91| 国产精品情趣视频| 久草热视频在线观看| 白嫩亚洲一区二区三区| 亚洲天堂第二页| 日本少妇性生活| 国产精品一区二区视频| 亚洲精品在线视频观看| 大胆人体一区二区| 亚洲国内精品视频| 精品无码久久久久| 国产一区不卡视频| 亚洲一区二区免费视频软件合集| 伊伊综合在线| 亚洲精品不卡在线| 九热这里只有精品| 国产九九视频一区二区三区| 亚洲乱码国产乱码精品天美传媒| 五月天av在线| 亚洲国产高清福利视频| 欧美日韩免费做爰视频| 激情欧美一区二区| 亚洲啪啪av| 国产成人精品一区二区三区在线| 亚洲欧美日韩精品久久亚洲区| 国产精品第九页| 成人福利视频在线| www.av蜜桃| 加勒比久久高清| 国外色69视频在线观看| 丰满人妻一区二区三区无码av| 日韩一区中文字幕| 日本中文字幕二区| 香蕉视频官网在线观看日本一区二区| 国产精品美女av| 成人精品福利| 欧美日韩视频专区在线播放| 俄罗斯毛片基地| 久久av中文字幕片| 婷婷视频在线播放| 精品国产一区二区三区2021| 九九热99久久久国产盗摄| 国产高中女学生第一次| 尤物在线观看一区| 亚洲成人精品在线播放| 在线观看的日韩av| 久久99精品久久久久久久久久| 日本午夜大片a在线观看| 日韩av在线免费| 日韩在线视频不卡| 国产精品女主播av| 国产又黄又猛的视频| 亚洲一区色图| 黄色小网站91| 中文字幕人成乱码在线观看| 亚洲三级 欧美三级| 亚洲视频一区在线播放| 亚洲日本中文字幕区| 久久国产劲爆∧v内射| 亚洲一区视频| 影音先锋在线亚洲| 国产 日韩 欧美 综合 一区| 91精品国产高清久久久久久久久| 日韩有码电影| 欧美日韩国产免费| 国产一二三四在线| 26uuu成人网一区二区三区| 韩国中文字幕av| 一本到12不卡视频在线dvd| 亚洲精品日韩av| 色是在线视频| 精品国产一区二区三区在线观看| 精品国产18久久久久久| 色综合久久天天| 亚洲波多野结衣| 91免费观看视频在线| 色噜噜狠狠永久免费| 欧美色图首页| 亚洲精品不卡| ccyy激情综合| 国产精品视频一区国模私拍| 免费av不卡在线观看| 这里只有精品在线播放| 国产黄频在线观看| 欧美影院精品一区| 日本学生初尝黑人巨免费视频| 国产欧美日韩精品a在线观看| 久久久国产精品久久久| 日韩 欧美一区二区三区| 老子影院午夜伦不卡大全| 精品国产aⅴ| 国产欧美日韩综合一区在线观看| 国产成人77亚洲精品www| 91禁外国网站| 在线观看男女av免费网址| 亚洲午夜精品久久久久久性色 | 久久久一区二区三区| 99九九精品视频| 全国精品久久少妇| 日本在线xxx| 中文字幕av亚洲精品一部二部| 欧美一区二区综合| 爱高潮www亚洲精品| 成人精品福利视频| 亚洲日本网址| 欧美亚洲第一页| 污污的视频在线观看| 日韩在线视频观看| 激情小视频在线| 日韩精品在线观看网站| 丁香六月天婷婷| 欧美r级在线观看| 国产精品视频一二区| 欧美亚洲国产bt| 亚洲天堂一区在线| 午夜精品久久久久久久久| 久久综合色综合| 依依成人综合视频| 久草手机视频在线观看| 国产精品免费丝袜| 亚洲精品91在线| 国产亚洲1区2区3区| 欧美黑人欧美精品刺激| 成人看片黄a免费看在线| 91精品人妻一区二区三区蜜桃2| 狠狠色狠狠色综合| 色戒在线免费观看| 免费亚洲电影在线| 亚洲xxxx2d动漫1| 蜜桃视频免费观看一区| 午夜激情在线观看视频| 日本不卡一二三区黄网| aaa毛片在线观看| 丝袜亚洲另类欧美综合| 农村妇女精品一二区| 日韩av中文在线观看| 在线观看的毛片| 久久国产剧场电影| 999久久久精品视频| 韩国理伦片一区二区三区在线播放| 中文字幕永久视频| 美女脱光内衣内裤视频久久网站 | 国产一区二区在线视频播放| 国产精品人人爽人人做我的可爱| 欧美三级在线观看视频| 欧美一级网站| www.久久久精品| 精品一区二区三区视频 | 久久久亚洲高清| 亚洲图片另类小说| 国产精品久久久久久久午夜片| 看黄色录像一级片| 亚洲综合免费观看高清完整版| 国产亚洲欧美精品久久久www| 午夜精品在线视频一区| 欧美一区二区三区网站| 欧美日韩视频一区二区| 国产乱叫456在线| 亚洲国产精品va在线看黑人| 男人天堂资源在线| 中文字幕精品av| 亚洲夜夜综合| 欧美专区日韩视频| 欧美亚洲二区| 国产伦精品一区二区三区视频免费| 人人网欧美视频| 日韩精彩视频| 欧美一区二区| 欧美日韩亚洲一| 精品一区二区三区在线播放 | 国产欧美日韩另类一区| www深夜成人a√在线| 亚洲成a人v欧美综合天堂| 亚洲另类在线观看| 日韩欧美久久久| 韩国中文字幕2020精品| 欧美成人合集magnet| 依依综合在线| 99国精产品一二二线| 伊人久久大香线蕉av不卡| 中文字幕一区二区三区在线乱码| 国产一区观看| 三级a三级三级三级a十八发禁止| 国产成人午夜片在线观看高清观看| 亚洲精品女人久久久| 中文字幕亚洲成人| 欧美精品韩国精品| 精品噜噜噜噜久久久久久久久试看| 欧美黄色小说| 欧美—级a级欧美特级ar全黄| 国产成人免费9x9x人网站视频| 91九色蝌蚪嫩草| 欧美综合另类| 亚洲熟妇国产熟妇肥婆| 国产精品12区| 中国特黄一级片| 欧美视频第一页| 亚洲a视频在线| 久久精品国产91精品亚洲| 一个人看的www视频在线免费观看| 成人在线中文字幕| 日韩电影一区| 久久久久久久少妇| av综合在线播放| 久久久99精品| 制服丝袜亚洲网站| 瑟瑟视频在线| 国产精品黄页免费高清在线观看| 日韩美脚连裤袜丝袜在线| 人妻激情另类乱人伦人妻| 韩国毛片一区二区三区| 亚洲一级黄色录像| 日本久久一区二区三区| 在线观看xxx| 韩日精品中文字幕| 99re8这里有精品热视频8在线| 正在播放久久| 久久精品国产99久久6| 美国黑人一级大黄| 色婷婷综合久久久中文一区二区| 天堂av资源网| 国产91|九色| 夜夜春成人影院| 免费高清在线观看免费| 91亚洲午夜精品久久久久久| 精品一区二区三区人妻| 日韩一区二区电影在线| av免费在线观看网站| 99re视频在线播放| 欧美特黄视频| 国产精品久久久久久亚洲色| 亚洲影院理伦片| 熟妇人妻中文av无码| 68精品国产免费久久久久久婷婷| 第四色中文综合网| 日韩欧美亚洲天堂| 2020日本不卡一区二区视频| 天天操天天操天天操天天| 日韩精品免费在线视频观看| 欧美男女交配| 亚洲成人蜜桃| 国产综合色精品一区二区三区| 亚洲波多野结衣| 精品久久久三级丝袜| аⅴ资源天堂资源库在线| 久久综合九色综合久99| 久久激情久久| 国产精品综合激情| 日韩亚洲欧美在线| 第一中文字幕在线| 久久涩涩网站| 蜜乳av一区二区| 欧美在线视频第一页| 欧美tk丨vk视频| 亚洲男人av| 亚欧精品在线| 国产精品18久久久久久久久 | xxxx视频在线| 91丨porny丨探花| 国产高潮在线观看| 在线亚洲免费| 成人黄色免费网址| 欧美美女直播网站| 丰满的护士2在线观看高清| 久久福利电影| 日韩av不卡在线观看| 日韩激情综合网| 亚洲福利视频免费观看| 在线国产成人影院| 天天操天天干天天玩| 972aa.com艺术欧美| 中国一区二区视频| 欧美国产精品人人做人人爱| 亚欧洲精品视频在线观看| 中文字幕av不卡在线| 亚洲成人www| 99青草视频在线播放视| 国产精品xxxx| 日本不卡一区二区| 国产精品18p| 中文字幕在线日韩| 精品女人视频| 午夜啪啪小视频| 日韩欧美极品在线观看| 成年人网站在线|