色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Java不同的算法

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-08 11:43 ? 次閱讀

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

我們將只關(guān)注核心解決方案,不使用任何外部依賴。我們將使用JDK的java.io和NIO2包來實(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)有自己的文件名限制。通過使用 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)限來執(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包的后繼者,它帶來了許多改進(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í)行清理。

無效的文件名拋出 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來檢查。

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ù)來測(cè)試文件名。我們還將嘗試避免任何I/O功能,只使用核心的Java方法。

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

使用String.contains

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

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

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

在定義了受限制的字符集之后,讓我們來確定當(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)在我們可以用它來測(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á)式。讓我們來實(shí)現(xiàn)一個(gè)只接受字母數(shù)字和點(diǎn)字符的模式,其長(zhǎng)度不超過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è)例子中,我們跳過了操作系統(tǒng)的檢查功能。

總結(jié)

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

我們從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ī)則。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7057

    瀏覽量

    124867
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2984

    瀏覽量

    106734
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1558

    瀏覽量

    63439
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    577

    瀏覽量

    25164
收藏 0人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    數(shù)據(jù)結(jié)構(gòu)與算法分析(Java版)(pdf)

    數(shù)據(jù)結(jié)構(gòu)與算法分析(Java版)(pdf)http://www.ibeifeng.com/read.php?tid=4812&u=73481【中文】Java數(shù)據(jù)結(jié)構(gòu)和算法中文第
    發(fā)表于 12-20 21:22

    JAVA算法大全

    歡迎多來分享,一起學(xué)習(xí)交流
    發(fā)表于 05-28 12:40

    史上最全面Java面試匯總(面試題+答案)精選資料分享

    JAVA面試精選【Java基礎(chǔ)第一部分】JAVA面試精選【Java基礎(chǔ)第二部分】JAVA面試精選【Jav
    發(fā)表于 07-21 09:39

    Linux系統(tǒng)接口編程

    知識(shí)圖譜大學(xué)課程數(shù)字邏輯計(jì)算機(jī)組成原理匯編語言編譯原理操作系統(tǒng)計(jì)算機(jī)網(wǎng)絡(luò)高級(jí)語言(C、C++、Java算法與數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)庫(kù)面向?qū)ο蠓椒ㄜ浖こ套詫W(xué)內(nèi)容ARM 指令集、體系架構(gòu)ARM 外設(shè)Linux 內(nèi)核、驅(qū)動(dòng)Linux 系統(tǒng)接口編程Linux 網(wǎng)絡(luò)編程Qt ...
    發(fā)表于 11-04 08:02

    JAVA語言的工具類與算法

    JAVA語言的工具類與算法6.1 語言基礎(chǔ)類庫(kù);            
    發(fā)表于 12-14 20:34 ?66次下載

    JAVA語言實(shí)現(xiàn)RSA公鑰密碼算法

    JAVA語言實(shí)現(xiàn)RSA公鑰密碼算法:本文闡述了公開密鑰密碼體制RSA算法的原理及實(shí)現(xiàn)技術(shù)。并在此基礎(chǔ)上,給出了JAVA語言實(shí)現(xiàn)的RSA算法
    發(fā)表于 02-10 10:27 ?58次下載

    中國(guó)農(nóng)歷算法java實(shí)現(xiàn)

    /**  * 中國(guó)農(nóng)歷算法 - 實(shí)用于公歷 1901 年至 2100 年之間的 200 年  */import java.text.*;import java.util.*;class ChineseCalendarGB {  
    發(fā)表于 12-30 17:53 ?23次下載

    Java數(shù)組與算法試題

    Java數(shù)組與算法試題Java數(shù)組與算法試題Java數(shù)組與算法試題
    發(fā)表于 01-15 16:16 ?0次下載

    基于java的負(fù)載均衡算法解析及源碼分享

    負(fù)載均衡的算法實(shí)際上就是解決跨系統(tǒng)調(diào)用的時(shí)候,在考慮后端機(jī)器承載情況的前提下,保證請(qǐng)求分配的平衡和合理。下面是基于java的負(fù)載均衡算法解析及源碼,以供參考。
    發(fā)表于 01-01 19:29 ?2334次閱讀

    40道經(jīng)典JAVA算法題和解答

    本文檔的主要內(nèi)容詳細(xì)介紹的是40道經(jīng)典JAVA算法題和解答。
    發(fā)表于 07-02 08:00 ?0次下載
    40道經(jīng)典<b class='flag-5'>JAVA</b><b class='flag-5'>算法</b>題和解答

    安裝包是7.apk,要求獲取flag

    通過分析java算法,判斷輸入是否正確。 如下是該APK算法部分的核心代碼,密碼主要是年月日+m數(shù)組某成員組成的字符串,經(jīng)過如下a函數(shù)運(yùn)算處理,如果最終運(yùn)算結(jié)果等于34,則驗(yàn)證成功。 下面主要通過解讀
    的頭像 發(fā)表于 09-26 10:09 ?3351次閱讀
    安裝包是7.apk,要求獲取flag

    數(shù)據(jù)結(jié)構(gòu)與算法分析——Java語言描述

    數(shù)據(jù)結(jié)構(gòu)與算法分析——Java語言描述說明。
    發(fā)表于 05-31 14:25 ?22次下載

    Java智能卡EEPROM碎片整理算法

    Java智能卡EEPROM碎片整理算法(c語言嵌入式開發(fā)需要學(xué)的東西)-Java智能卡EEPROM碎片整理算法
    發(fā)表于 07-30 11:34 ?9次下載
    <b class='flag-5'>Java</b>智能卡EEPROM碎片整理<b class='flag-5'>算法</b>

    嵌入式 Linux 應(yīng)用程序開發(fā)概覽

    這是我給公司研發(fā)部同事的一個(gè)分享培訓(xùn)課程,把內(nèi)容大綱分享出來。知識(shí)圖譜大學(xué)課程數(shù)字邏輯 計(jì)算機(jī)組成原理 匯編語言 編譯原理 操作系統(tǒng) 計(jì)算機(jī)網(wǎng)絡(luò) 高級(jí)語言(C、C++、Java算法與數(shù)據(jù)結(jié)構(gòu)
    發(fā)表于 11-01 17:21 ?8次下載
    嵌入式 Linux 應(yīng)用程序開發(fā)概覽

    Java算法大全源碼包開源源碼

    Java算法大全源碼包開源源碼
    發(fā)表于 06-07 14:58 ?1次下載
    主站蜘蛛池模板: 国产AV无码成人黄网站免费 | 扒开老师大腿猛进AAA片邪恶 | 中文字幕一区二区三区在线观看 | 欧美精品九九99久久在免费线 | 国产偷国产偷亚洲高清人乐享 | 亚洲国产日韩制服在线观看 | 久久精品亚洲热综合一本 | 91国偷自产一区二区三区 | 亚洲色欲国产免费视频 | 国产传媒18精品免费观看 | 杨幂视频在线观看1分30秒 | 天堂so导航 | hd性欧美俱乐部中文 | 解开白丝老师的短裙猛烈进入 | 一级毛片视频免费 | 欧美成人猛片aaaaaaa | 久久国语露脸精品国产 | 久久久久久久尹人综合网亚洲 | 伊人久久丁香色婷婷啪啪 | 小776 论坛 | 无码日韩人妻精品久久蜜桃入口 | 牛牛在线精品视频(正) | 国产福利一区二区精品 | 久久se视频精品视频在线 | 国产在线成人一区二区三区 | 国产又粗又黄又爽的大片 | 亚色九九九全国免费视频 | 极品美女久久久久久久久久久 | 攻把受做得合不拢腿play | 蜜桃日本免费观看MV | 四虎永久免费 | 二次元美女扒开内裤喷水 | 亚洲色欲色欲www474ee | 国产精品人妻无码久久久2022 | 深爱激情站 | 亚洲国产第一区二区三区 | 亚洲乱码爆乳精品成人毛片 | aaaaaa级特色特黄的毛片 | 国产精品国产三级国产专区53 | 久久天天综合 | 一个人在线观看视频免费 |

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品