<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          不要再封裝各種 Util 工具類了,這款開源項(xiàng)目,真的很好用!

          共 9571字,需瀏覽 20分鐘

           ·

          2022-01-18 18:05


          今天給大家推薦一個(gè),非常好用的Java工具類庫,企業(yè)級(jí)常用工具類,基本都有,能避免重復(fù)造輪子及節(jié)省大量的開發(fā)時(shí)間,非常不錯(cuò),值得大家去了解使用。


          Hutool諧音 “糊涂”,寓意追求 “萬事都作糊涂觀,無所謂失,無所謂得” 的境界。


          Hutool 是一個(gè) Java 工具包,也只是一個(gè)工具包,它幫助我們簡化每一行代碼,減少每一個(gè)方法,讓 Java 語言也可以 “甜甜的”。Hutool 最初是我項(xiàng)目中 “util” 包的一個(gè)整理,后來慢慢積累并加入更多非業(yè)務(wù)相關(guān)功能,并廣泛學(xué)習(xí)其它開源項(xiàng)目精髓,經(jīng)過自己整理修改,最終形成豐富的開源工具集。


          ?

          1

          功能


          一個(gè) Java 基礎(chǔ)工具類,對(duì)文件、流、加密解密、轉(zhuǎn)碼、正則、線程、XML 等 JDK 方法進(jìn)行封裝,組成各種 Util 工具類,同時(shí)提供以下組件:


          • hutool-aop JDK 動(dòng)態(tài)代理封裝,提供非 IOC 下的切面支持

          • hutool-bloomFilter 布隆過濾,提供一些 Hash 算法的布隆過濾

          • hutool-cache 緩存

          • hutool-core 核心,包括 Bean 操作、日期、各種 Util 等

          • hutool-cron 定時(shí)任務(wù)模塊,提供類 Crontab 表達(dá)式的定時(shí)任務(wù)

          • hutool-crypto 加密解密模塊

          • hutool-db JDBC 封裝后的數(shù)據(jù)操作,基于 ActiveRecord 思想

          • hutool-dfa 基于 DFA 模型的多關(guān)鍵字查找

          • hutool-extra 擴(kuò)展模塊,對(duì)第三方封裝(模板引擎、郵件等)

          • hutool-http 基于 HttpUrlConnection 的 Http 客戶端封裝

          • hutool-log 自動(dòng)識(shí)別日志實(shí)現(xiàn)的日志門面

          • hutool-script 腳本執(zhí)行封裝,例如 Javascript

          • hutool-setting 功能更強(qiáng)大的 Setting 配置文件和 Properties 封裝

          • hutool-system 系統(tǒng)參數(shù)調(diào)用封裝(JVM 信息等)

          • hutool-json JSON 實(shí)現(xiàn)

          • hutool-captcha 圖片驗(yàn)證碼實(shí)現(xiàn)



          2

          安裝


          maven項(xiàng)目在pom.xml添加以下依賴即可:


          <dependency>
          ????<groupId>cn.hutoolgroupId>

          ????<artifactId>hutool-allartifactId>
          ????<version>4.6.3version>
          dependency>



          2

          簡單測試


          CronUtil(定時(shí)任務(wù))


          這個(gè)工具就更厲害了,完全不需要類似 quartz 這樣的框架來做定時(shí)任務(wù),而且 CronUtil 也不需要任何其他依賴,只需要在 resources 下建一個(gè)配置文件,然后在程序啟動(dòng)的時(shí)候?qū)⒍〞r(shí)任務(wù)開啟就行了


          cron.setting:


          cc.ryanc.halo.web.controller.admin.BackupController.backupResources = 0?0?1?* * ?
          cc.ryanc.halo.web.controller.admin.BackupController.backupDatabase = 0?0?1?* * ?
          cc.ryanc.halo.web.controller.admin.BackupController.backupPosts = 0?0?1?* * ?
          @Override
          public?void?onApplicationEvent(ContextRefreshedEvent event)
          {
          ?this.loadActiveTheme();
          ?this.loadOptions();
          ?this.loadFiles();
          ?this.loadThemes();
          ?//啟動(dòng)定時(shí)任務(wù)
          ?CronUtil.start();
          ?log.info("定時(shí)任務(wù)啟動(dòng)成功!");
          }


          Convert


          類型轉(zhuǎn)換工具類,用于各種類型數(shù)據(jù)的轉(zhuǎn)換。


          //轉(zhuǎn)換為字符串
          int a = 1;
          String?aStr = Convert.toStr(a);
          //轉(zhuǎn)換為指定類型數(shù)組
          String[] b = {"1", "2", "3", "4"};
          Integer[] bArr = Convert.toIntArray(b);
          //轉(zhuǎn)換為日期對(duì)象
          String?dateStr = "2017-05-06";
          Date?date = Convert.toDate(dateStr);
          //轉(zhuǎn)換為列表
          String[] strArr = {"a", "b", "c", "d"};
          List<String> strList = Convert.toList(String.class, strArr);


          DateUtil


          日期時(shí)間工具類,定義了一些常用的日期時(shí)間操作方法。


          //Date、long、Calendar之間的相互轉(zhuǎn)換
          //當(dāng)前時(shí)間
          Date?date = DateUtil.date();
          //Calendar轉(zhuǎn)Date
          date = DateUtil.date(Calendar.getInstance());
          //時(shí)間戳轉(zhuǎn)Date
          date = DateUtil.date(System.currentTimeMillis());
          //自動(dòng)識(shí)別格式轉(zhuǎn)換
          String?dateStr = "2017-03-01";
          date = DateUtil.parse(dateStr);
          //自定義格式化轉(zhuǎn)換
          date = DateUtil.parse(dateStr, "yyyy-MM-dd");
          //格式化輸出日期
          String?format = DateUtil.format(date, "yyyy-MM-dd");
          //獲得年的部分
          int year = DateUtil.year(date);
          //獲得月份,從0開始計(jì)數(shù)
          int month = DateUtil.month(date);
          //獲取某天的開始、結(jié)束時(shí)間
          Date?beginOfDay = DateUtil.beginOfDay(date);
          Date?endOfDay = DateUtil.endOfDay(date);
          //計(jì)算偏移后的日期時(shí)間
          Date?newDate = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);
          //計(jì)算日期時(shí)間之間的偏移量
          long betweenDay = DateUtil.between(date, newDate, DateUnit.DAY);


          StrUtil


          字符串工具類,定義了一些常用的字符串操作方法。


          //判斷是否為空字符串
          String?str = "test";
          StrUtil.isEmpty(str);
          StrUtil.isNotEmpty(str);
          //去除字符串的前后綴
          StrUtil.removeSuffix("a.jpg", ".jpg");
          StrUtil.removePrefix("a.jpg", "a.");
          //格式化字符串
          String?template = "這只是個(gè)占位符:{}";
          String?str2 = StrUtil.format(template, "我是占位符");
          LOGGER.info("/strUtil format:{}", str2);


          ClassPathResource


          獲取classPath下的文件,在Tomcat等容器下,classPath一般是WEB-INF/classes。


          //獲取定義在src/main/resources文件夾中的配置文件
          ClassPathResource resource = new?ClassPathResource("generator.properties");
          Properties properties = new?Properties();
          properties.load(resource.getStream());
          LOGGER.info("/classPath:{}", properties);


          ReflectUtil


          Java反射工具類,可用于反射獲取類的方法及創(chuàng)建對(duì)象。


          //獲取某個(gè)類的所有方法
          Method[] methods = ReflectUtil.getMethods(PmsBrand.class);
          //獲取某個(gè)類的指定方法
          Method method = ReflectUtil.getMethod(PmsBrand.class, "getId");
          //使用反射來創(chuàng)建對(duì)象
          PmsBrand pmsBrand = ReflectUtil.newInstance(PmsBrand.class);
          //反射執(zhí)行對(duì)象的方法
          ReflectUtil.invoke(pmsBrand, "setId", 1);


          NumberUtil


          數(shù)字處理工具類,可用于各種類型數(shù)字的加減乘除操作及判斷類型。


          double?n1 = 1.234;
          double?n2 = 1.234;
          double?result;
          //對(duì)float、double、BigDecimal做加減乘除操作
          result = NumberUtil.add(n1, n2);
          result = NumberUtil.sub(n1, n2);
          result = NumberUtil.mul(n1, n2);
          result = NumberUtil.div(n1, n2);
          //保留兩位小數(shù)
          BigDecimal roundNum = NumberUtil.round(n1, 2);
          String n3 = "1.234";
          //判斷是否為數(shù)字、整數(shù)、浮點(diǎn)數(shù)
          NumberUtil.isNumber(n3);
          NumberUtil.isInteger(n3);
          NumberUtil.isDouble(n3)


          BeanUtil


          JavaBean的工具類,可用于Map與JavaBean對(duì)象的互相轉(zhuǎn)換以及對(duì)象屬性的拷貝。


          PmsBrand brand = new?PmsBrand();
          brand.setId(1L);
          brand.setName("小米");
          brand.setShowStatus(0);
          //Bean轉(zhuǎn)Map
          Map<String, Object> map = BeanUtil.beanToMap(brand);
          LOGGER.info("beanUtil bean to map:{}", map);
          //Map轉(zhuǎn)Bean
          PmsBrand mapBrand = BeanUtil.mapToBean(map, PmsBrand.class, false);
          LOGGER.info("beanUtil map to bean:{}", mapBrand);
          //Bean屬性拷貝
          PmsBrand copyBrand = new?PmsBrand();
          BeanUtil.copyProperties(brand, copyBrand);
          LOGGER.info("beanUtil copy properties:{}", copyBrand);


          CollUtil


          集合操作的工具類,定義了一些常用的集合操作。


          //數(shù)組轉(zhuǎn)換為列表
          String[] array = new?String[]{"a", "b", "c", "d", "e"};
          List<String> list = CollUtil.newArrayList(array);
          //join:數(shù)組轉(zhuǎn)字符串時(shí)添加連接符號(hào)
          String?joinStr = CollUtil.join(list, ",");
          LOGGER.info("collUtil join:{}", joinStr);
          //將以連接符號(hào)分隔的字符串再轉(zhuǎn)換為列表
          List<String> splitList = StrUtil.split(joinStr, ',');
          LOGGER.info("collUtil split:{}", splitList);
          //創(chuàng)建新的Map、Set、List
          HashMap<Object, Object> newMap = CollUtil.newHashMap();
          HashSet<Object> newHashSet = CollUtil.newHashSet();
          ArrayList<Object> newList = CollUtil.newArrayList();
          //判斷列表是否為空
          CollUtil.isEmpty(list);


          MapUtil


          Map操作工具類,可用于創(chuàng)建Map對(duì)象及判斷Map是否為空。


          //將多個(gè)鍵值對(duì)加入到Map中
          Map<Object, Object> map = MapUtil.of(new?String[][]{
          ????{"key1", "value1"},
          ????{"key2", "value2"},
          ????{"key3", "value3"}
          });
          //判斷Map是否為空
          MapUtil.isEmpty(map);
          MapUtil.isNotEmpty(map)


          AnnotationUtil


          注解工具類,可用于獲取注解與注解中指定的值。


          //獲取指定類、方法、字段、構(gòu)造器上的注解列表
          Annotation[] annotationList = AnnotationUtil.getAnnotations(HutoolController.class, false);
          LOGGER.info("annotationUtil annotations:{}", annotationList);
          //獲取指定類型注解
          Api api = AnnotationUtil.getAnnotation(HutoolController.class, Api.class);
          LOGGER.info("annotationUtil api value:{}", api.description());
          //獲取指定類型注解的值
          Object annotationValue = AnnotationUtil.getAnnotationValue(HutoolController.class, RequestMapping.class);


          SecureUtil


          加密解密工具類,可用于MD5加密。














          大道至簡,是宇宙萬物發(fā)展之規(guī)律,是中華文化之精髓,是中華道家哲學(xué),是大道理極其簡單,簡單到一兩句話就能說明白。所謂“真?zhèn)饕痪湓?,假傳萬卷書”?!叭f物之始,大道至簡,衍化至繁”出自老子的《道德經(jīng)》。大道至簡,不僅被哲學(xué)流派道家、儒家等所重視,也是人生在世的生活境界。


          大道至簡,大道無形,大道無法,這是一種大道自然、返樸歸真的高級(jí)功態(tài)。在這種清凈無為、忘我無私、天人合一的狀態(tài)中,不求長功,功力自然上長;不求治病,身心自然調(diào)整;不求功能,功能自然顯現(xiàn);你不求大小周天,百脈自然暢通,最深刻的真理是最簡單最普通的真理。把最復(fù)雜的變成最簡單的,才是最高明的。最偉大的人僅僅因?yàn)楹唵尾棚@得崇高。


          大道至簡,人生亦簡。開悟,深?yuàn)W了就簡單,簡單了才深?yuàn)W,從看山是山,到看山是山,境界不一樣,從簡單到復(fù)雜,再從復(fù)雜到簡單,就是升華。生活的意義在于簡單,人修煉到一定程度,會(huì)淡泊一些事,會(huì)簡單,你可以理解別人,但別人不一定理解你,其實(shí)人不在理解,在認(rèn)同。


          精于心,簡于形??絾栰`魂這是人的終極問題,簡不僅是一種至美,也是一種能力、一種境界??赐噶瞬徽f透,高境界;朦朧地看,心透 ;透非透、 知未知 ,故意不看透,才是透徹;知道世事看不透,就是透,透徹后的不透徹,明白后的不明白,難得糊涂是真境界。


          “大道至簡”是做人的智慧,做人做事要將一件復(fù)雜的事情化為簡單,那是需要智慧的。將繁雜的事情回歸到簡單,要有智慧、能力,也要有決心。有智慧的人都喜歡大道至簡,因此,功和利,不可趨之若鶩;名和財(cái),不可為之所累。淡泊以明志,寧靜以致遠(yuǎn)。我們要簡簡單單的做人,踏踏實(shí)實(shí)的做事,用智慧化難為簡。


          為名利盡拋寵辱,清純似兒時(shí)天真的童貞,樸實(shí)如父輩耕耘的沃土,只有心情平靜的人方能視見“斜陽照墟落,窮巷牛羊歸”的悠閑,聽聞“荷風(fēng)送秋氣,竹露滴清響”的天籟,感受那“空山不見人,但聞人語響”的空曠。陶淵明就是這樣的人,所以他能夠吟出“采菊東籬下,悠然見南山”的絕句;歐陽修也是這樣的一個(gè)人,所以他在謫居時(shí)仍能悠然自得的寫出《醉翁亭記》。


          大道至簡,人生亦簡。簡不是物質(zhì)的貧乏,而是精神的自在;簡不是生命的空虛,而是心靈的單純。大道至簡是最高的道理往往是最簡明的,人要學(xué)會(huì)簡單、簡樸生活、簡捷行事,放下自己的私心雜念,當(dāng)超出自我欲望的牢籠,當(dāng)真正忘記自己的思想,忘記自己的意識(shí),進(jìn)入忘我忘物的狀態(tài)。


          人生的繁出于惑,以“仁”抗拒誘惑,以“智”解除困惑。不惑,才是人生由繁入簡的標(biāo)志。弱水三千,我只取一瓢飲;人生百態(tài),須當(dāng)從一而終。樂以忘憂,簡以存真,才是人生的“大道至簡”。


          有個(gè)大道至簡、平常心是道的故事:一個(gè)行者問老道長:“您得道前,做什么?”老道長:“砍柴擔(dān)水做飯。”行者問:“那得道后呢?”老道長:“砍柴擔(dān)水做飯。”行者又問:“那何謂得道?”老道長:“得道前,砍柴時(shí)惦記著挑水,挑水時(shí)惦記著做飯;得道后,砍柴即砍柴,擔(dān)水即擔(dān)水,做飯即做飯。”老道長和行者的對(duì)話讓我們開悟,許多至高至深的道理都是含蘊(yùn)在一些極其簡單的思想中。


          大道至簡,人生易簡。一千個(gè)人有一千種生存方式和生活道路,走過歲月、走過生活,心里有許多的感慨,一切放下,一切自在;當(dāng)下放下,當(dāng)下自在,生活中的很多問題并不需要放在心里,人生的很多負(fù)擔(dān)并不需要挑在肩上。一念放下,才能感受到簡單生活的樂趣,才能感受到心靈飛翔的快感。要想改變一些事情,首先得把自己給找回來。我們都有潛在的能量,只是很容易:被習(xí)慣所掩蓋,被時(shí)間所迷離,被惰性所消磨。我們應(yīng)該記住該記住的,忘記該忘記的,改變能改變的,接受不能改變的。我們要用最少的悔恨面對(duì)過去,用最少的浪費(fèi)面對(duì)現(xiàn)在,用最多的夢面對(duì)未來。


          天地之道,簡易而已。人生苦短,諸事不想太復(fù)雜,簡單生活。人生這部大戲一旦拉開序幕,不管你如何怯場,都得演到戲的結(jié)尾。成長過程中最大的挑戰(zhàn)在于有些路段,只能自己寂靜地走,快樂工作、簡單生活才是幸福生活,人要懂得知足常樂,所有的哀傷、痛楚,所有不能放棄的事情,不過是生命里的一個(gè)過渡,你跳過了就可以變得更精彩。


          最好的生活就是簡單生活,一盞茶,一張桌,一處清幽,日子平淡,心無雜念??墒呛唵蔚纳顓s需要百般的努力,這樣才會(huì)無憂無慮欣然享受生活。生活總的來說是完美的,不完美的是心態(tài),不懂得欣賞的人,就會(huì)用挑剔把一切變得有殘缺。簡單做人,率性而為,把握分寸,隨遇而安,坦然接受現(xiàn)實(shí);簡單做事,不惹事、不生事、不怕事,不悔、不怨、不惜自己所做的事。


          人生就是一場漫長對(duì)抗,有些人笑在開始,有些人卻贏在最終。試著微笑,試著回眸,放松自己,不強(qiáng)求、不萎靡、不浮躁。簡單生活,隨心、隨性、隨緣,做最好的自己,知足、微笑、淡然,即使再苦再累,只要堅(jiān)持往前走,屬于自己的風(fēng)景終會(huì)出現(xiàn)。


          生活容不容易,關(guān)鍵看你怎么活。處境在于心境,心境改變了,處境也會(huì)改變。你向生活要得越多,你就會(huì)變得越緊張、越復(fù)雜,生活也就越不容易。反之,你對(duì)生活要求的越少,就越容易滿足,越容易快樂。江山明月,本無常主,得閑便是主人;大道至簡,活在當(dāng)下,知足便能常樂。


          悟入無懷之靜境,一輪之心月獨(dú)明,盡顯心靜之境界;心靜自然從容灑脫,持心若水笑面人生,更現(xiàn)心靜之魅力。人生在世,平淡才是最真,靜默才是最美,生命里最持久的不是繁華,而是平淡,不是熱鬧而是清歡。保持一顆童心,不開心的時(shí)候,心無遮攔地向朋友傾訴煩惱,開心的時(shí)候,肆無忌憚地開懷大笑,也許所有的憂愁會(huì)在傾訴中流走,所有的緊張會(huì)在大笑中釋放。像孩子一樣,簡單生活,快樂生活,保持心靈原生態(tài),一切都是美好的。


          生命里總有一個(gè)故事,想講述卻難以開口,就這樣在心底,漸漸譜成了曲。人就是這樣,得不到的永遠(yuǎn)向往,失去了的,才會(huì)覺到珍貴。所謂的,得失、情緣、風(fēng)景、驛站,都在時(shí)光的塵煙中,慢慢淡散。雖然,有些事情放下很難,但是,不屬于自己的東西,終究會(huì)走遠(yuǎn)。


          人的一生,注定要經(jīng)歷很多。紅塵路上,有朗朗的笑聲,有委屈的淚水,懵懂的堅(jiān)持著,有成功的自信,有失敗的警醒,每一段經(jīng)歷注定珍貴。生命的豐盈緣于心的慈悲,生活的美好緣于擁有一顆平常心,生活簡單讓人輕松快樂,想法簡單讓人平和寧靜。因?yàn)楹唵?,才深悟生命之輕,因?yàn)楹唵危哦聪ば撵`之靜。



          //MD5加密
          String?str = "123456";
          String?md5Str = SecureUtil.md5(str);
          LOGGER.info("secureUtil md5:{}", md5Str);


          CaptchaUtil


          驗(yàn)證碼工具類,可用于生成圖形驗(yàn)證碼。


          //生成驗(yàn)證碼圖片
          LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);
          try?{
          ????request.getSession().setAttribute("CAPTCHA_KEY", lineCaptcha.getCode());
          ????response.setContentType("image/png");//告訴瀏覽器輸出內(nèi)容為圖片
          ????response.setHeader("Pragma", "No-cache");//禁止瀏覽器緩存
          ????response.setHeader("Cache-Control", "no-cache");
          ????response.setDateHeader("Expire", 0);
          ????lineCaptcha.write(response.getOutputStream());
          } catch?(IOException e) {
          ????e.printStackTrace();
          }


          Hutool中的工具類很多,可以參考官網(wǎng):https://www.hutool.cn/


          當(dāng)然,還有很多其他非常方便的方法,留著你自己去測試吧!使用Hutool工具,可以大大提高你的開發(fā)效率!



          往期推薦



          Eclipse 跌落“神壇”,這款 IDE 后來居上!

          推薦一個(gè) Spring Boot 快速開發(fā)利器

          更快 Maven 來襲,性能大幅提升!

          Kafka那些值得我們學(xué)習(xí)的優(yōu)秀設(shè)計(jì)

          徹底搞懂 MyBaits 中#{}和${}的區(qū)別,#{}如何防止注入?

          MySQL模糊查詢?cè)僖灿貌恢?like+% 了!



          瀏覽 73
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费看黄色一级片 | 免费看h网站 | 最新三级片在线播放 | 精品破处 | 国产无码激情 |