├── docs ├── .nojekyll └── js │ └── version.js ├── bin ├── version.txt ├── test.sh ├── deploy.sh ├── cobertura.sh ├── commit.sh ├── simple_install.sh ├── sync.sh ├── install.sh ├── package.sh ├── fast_install.sh ├── check_dependency_updates.sh ├── javadoc.sh ├── push_dev.sh ├── logo.sh ├── push_master.sh └── update_version.sh ├── hutool-core └── src │ ├── test │ ├── resources │ │ ├── text.txt │ │ ├── test-zip │ │ │ ├── test-add │ │ │ │ └── test.txt │ │ │ ├── test.zip │ │ │ └── addFile.txt │ │ ├── issueI91VF1.csv │ │ ├── test.csv │ │ ├── issueIA8WE0.csv │ │ ├── test_bean.csv │ │ ├── test_lines_cr.csv │ │ ├── 1_psi_index_0.txt │ │ ├── hutool.jpg │ │ ├── test_lines.csv │ │ ├── test-compile │ │ │ ├── a │ │ │ │ ├── A.class │ │ │ │ ├── A$1.class │ │ │ │ └── A$InnerClass.class │ │ │ ├── b │ │ │ │ ├── B.class │ │ │ │ └── B.java │ │ │ ├── c │ │ │ │ ├── C.class │ │ │ │ └── C.java │ │ │ └── error │ │ │ │ └── ErrorClazz.java │ │ ├── test_lines_crlf.csv │ │ ├── test.properties │ │ ├── test.xml │ │ └── issueICRMKA.csv │ └── java │ │ └── cn │ │ └── hutool │ │ └── core │ │ ├── lang │ │ ├── IssueIAOGDRTest.java │ │ ├── TupleTest.java │ │ └── tree │ │ │ └── TreeBuilderTest.java │ │ ├── date │ │ ├── IssueIB9NPUTest.java │ │ ├── IssueIC00HGTest.java │ │ ├── IssueI82Y1LTest.java │ │ ├── DateFieldTest.java │ │ ├── ZoneUtilTest.java │ │ ├── IssueI97WU6Test.java │ │ ├── chinese │ │ │ └── IssueI5YB1ATest.java │ │ ├── Issue3348Test.java │ │ └── Issue2612Test.java │ │ ├── swing │ │ ├── DesktopUtilTest.java │ │ └── RobotUtilTest.java │ │ ├── img │ │ ├── FontUtilTest.java │ │ ├── IssueI8L8UATest.java │ │ └── Issue2735Test.java │ │ ├── util │ │ ├── IssueICOJVZTest.java │ │ ├── IssueICA9S5Test.java │ │ ├── IssueIBP6T1Test.java │ │ ├── Issue3660Test.java │ │ ├── IssueI9IDAGTest.java │ │ ├── IssueI9UK5VTest.java │ │ └── ClassLoaderUtilTest.java │ │ ├── io │ │ ├── ManifestUtilTest.java │ │ ├── FileReaderTest.java │ │ └── file │ │ │ └── Issue3557Test.java │ │ ├── convert │ │ ├── IssueIALV38Test.java │ │ ├── StringConvertTest.java │ │ └── Issue2611Test.java │ │ ├── codec │ │ ├── BCDTest.java │ │ ├── RotTest.java │ │ └── CaesarTest.java │ │ ├── compress │ │ └── ZipReaderTest.java │ │ ├── text │ │ └── csv │ │ │ ├── IssueIB5UQ8Test.java │ │ │ └── IssueICRMKATest.java │ │ ├── map │ │ └── IssueI88R5MTest.java │ │ ├── annotation │ │ └── scanner │ │ │ └── AnnotationForScannerTest.java │ │ └── net │ │ └── FormUrlencodedTest.java │ └── main │ └── java │ └── cn │ └── hutool │ └── core │ ├── clone │ ├── package-info.java │ ├── Cloneable.java │ └── CloneSupport.java │ ├── net │ ├── package-info.java │ ├── multipart │ │ └── package-info.java │ └── url │ │ └── package-info.java │ ├── package-info.java │ ├── img │ ├── package-info.java │ └── gif │ │ └── package-info.java │ ├── codec │ ├── package-info.java │ ├── Encoder.java │ └── Decoder.java │ ├── swing │ ├── package-info.java │ └── clipboard │ │ └── package-info.java │ ├── thread │ ├── lock │ │ ├── package-info.java │ │ └── NoReadWriteLock.java │ ├── package-info.java │ └── threadlocal │ │ └── package-info.java │ ├── getter │ └── package-info.java │ ├── lang │ ├── hash │ │ ├── package-info.java │ │ ├── Hash.java │ │ ├── Hash32.java │ │ ├── Hash64.java │ │ └── Hash128.java │ ├── generator │ │ ├── package-info.java │ │ ├── Generator.java │ │ ├── UUIDGenerator.java │ │ └── ObjectIdGenerator.java │ ├── id │ │ └── package-info.java │ ├── loader │ │ ├── package-info.java │ │ └── Loader.java │ ├── reflect │ │ └── package-info.java │ ├── ansi │ │ ├── package-info.java │ │ ├── ForeOrBack.java │ │ └── AnsiElement.java │ ├── caller │ │ └── package-info.java │ ├── copier │ │ ├── package-info.java │ │ └── Copier.java │ ├── mutable │ │ ├── package-info.java │ │ └── Mutable.java │ ├── package-info.java │ ├── intern │ │ ├── package-info.java │ │ ├── JdkStringInterner.java │ │ └── Interner.java │ ├── Filter.java │ ├── func │ │ ├── package-info.java │ │ └── Consumer3.java │ ├── Matcher.java │ ├── ref │ │ ├── Ref.java │ │ └── package-info.java │ ├── Chain.java │ ├── tree │ │ ├── package-info.java │ │ └── parser │ │ │ └── NodeParser.java │ ├── Replacer.java │ └── Editor.java │ ├── io │ ├── checksum │ │ ├── package-info.java │ │ └── crc16 │ │ │ └── package-info.java │ ├── copy │ │ └── package-info.java │ ├── file │ │ ├── package-info.java │ │ ├── visitor │ │ │ └── package-info.java │ │ └── FileMode.java │ ├── watch │ │ ├── package-info.java │ │ ├── watchers │ │ │ └── package-info.java │ │ ├── SimpleWatcher.java │ │ └── WatchAction.java │ ├── resource │ │ ├── package-info.java │ │ └── WebAppResource.java │ ├── unit │ │ └── package-info.java │ ├── package-info.java │ └── LineHandler.java │ ├── stream │ └── package-info.java │ ├── text │ ├── escape │ │ └── package-info.java │ ├── replacer │ │ └── package-info.java │ ├── package-info.java │ ├── csv │ │ ├── package-info.java │ │ └── CsvRowHandler.java │ └── finder │ │ └── package-info.java │ ├── annotation │ ├── package-info.java │ ├── scanner │ │ └── package-info.java │ └── AnnotationAttributeValueProvider.java │ ├── bean │ ├── copier │ │ ├── package-info.java │ │ ├── provider │ │ │ └── package-info.java │ │ └── IJSONTypeConverter.java │ └── package-info.java │ ├── compiler │ └── package-info.java │ ├── compress │ └── package-info.java │ ├── map │ ├── package-info.java │ └── multi │ │ └── package-info.java │ ├── math │ └── package-info.java │ ├── builder │ ├── package-info.java │ └── Builder.java │ ├── comparator │ └── package-info.java │ ├── date │ ├── format │ │ └── package-info.java │ ├── package-info.java │ └── chinese │ │ └── package-info.java │ ├── util │ ├── package-info.java │ └── ObjUtil.java │ ├── exceptions │ └── package-info.java │ ├── convert │ ├── package-info.java │ └── impl │ │ ├── package-info.java │ │ ├── OptConverter.java │ │ ├── TimeZoneConverter.java │ │ ├── UUIDConverter.java │ │ ├── OptionalConverter.java │ │ ├── CurrencyConverter.java │ │ └── CharsetConverter.java │ └── collection │ ├── package-info.java │ ├── CollectionUtil.java │ ├── ResettableIter.java │ └── IterableIter.java ├── hutool-extra └── src │ ├── test │ ├── resources │ │ ├── templates │ │ │ ├── enjoy_test.etl │ │ │ ├── velocity_test.vtl │ │ │ ├── beetl_test.btl │ │ │ ├── freemarker_test.ftl │ │ │ ├── jetbrick_test.jetx │ │ │ ├── issue3488.ftl │ │ │ ├── rythm_test.tmpl │ │ │ ├── thymeleaf_test.ttl │ │ │ ├── wit_test.wit │ │ │ └── velocity_test_gbk.vtl │ │ └── image │ │ │ └── hutool.png │ └── java │ │ └── cn │ │ └── hutool │ │ └── extra │ │ └── ftp │ │ └── SimpleFtpServerTest.java │ └── main │ ├── resources │ └── META-INF │ │ ├── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── spring.factories │ │ └── services │ │ ├── cn.hutool.extra.pinyin.PinyinEngine │ │ ├── cn.hutool.extra.expression.ExpressionEngine │ │ ├── cn.hutool.extra.template.TemplateEngine │ │ └── cn.hutool.extra.tokenizer.TokenizerEngine │ └── java │ └── cn │ └── hutool │ └── extra │ ├── cglib │ └── package-info.java │ ├── spring │ ├── package-info.java │ └── EnableSpringUtil.java │ ├── expression │ ├── package-info.java │ └── engine │ │ ├── package-info.java │ │ ├── jexl │ │ └── package-info.java │ │ ├── rhino │ │ └── package-info.java │ │ ├── jfireel │ │ └── package-info.java │ │ ├── aviator │ │ └── package-info.java │ │ ├── mvel │ │ └── package-info.java │ │ ├── qlexpress │ │ └── package-info.java │ │ └── spel │ │ └── package-info.java │ ├── pinyin │ ├── engine │ │ ├── package-info.java │ │ ├── jpinyin │ │ │ └── package-info.java │ │ ├── pinyin4j │ │ │ └── package-info.java │ │ ├── houbbpinyin │ │ │ └── package-info.java │ │ └── bopomofo4j │ │ │ └── package-info.java │ └── package-info.java │ ├── ftp │ ├── package-info.java │ └── FtpMode.java │ ├── mail │ └── package-info.java │ ├── qrcode │ └── package-info.java │ ├── ssh │ └── package-info.java │ ├── template │ ├── engine │ │ ├── package-info.java │ │ ├── beetl │ │ │ └── package-info.java │ │ ├── rythm │ │ │ └── package-info.java │ │ ├── wit │ │ │ └── package-info.java │ │ ├── velocity │ │ │ └── package-info.java │ │ ├── enjoy │ │ │ └── package-info.java │ │ ├── thymeleaf │ │ │ └── package-info.java │ │ ├── freemarker │ │ │ └── package-info.java │ │ └── jetbrick │ │ │ ├── package-info.java │ │ │ └── loader │ │ │ └── package-info.java │ ├── package-info.java │ └── TemplateEngine.java │ ├── tokenizer │ ├── engine │ │ ├── package-info.java │ │ ├── word │ │ │ └── package-info.java │ │ ├── ansj │ │ │ └── package-info.java │ │ ├── hanlp │ │ │ └── package-info.java │ │ ├── jcseg │ │ │ └── package-info.java │ │ ├── jieba │ │ │ └── package-info.java │ │ ├── mmseg │ │ │ └── package-info.java │ │ ├── ikanalyzer │ │ │ └── package-info.java │ │ ├── mynlp │ │ │ └── package-info.java │ │ └── analysis │ │ │ ├── package-info.java │ │ │ └── SmartcnEngine.java │ ├── package-info.java │ ├── Result.java │ ├── TokenizerEngine.java │ ├── TokenizerUtil.java │ └── Word.java │ ├── emoji │ └── package-info.java │ ├── validation │ └── package-info.java │ ├── servlet │ └── package-info.java │ ├── package-info.java │ └── compress │ ├── archiver │ └── package-info.java │ ├── extractor │ └── package-info.java │ └── package-info.java ├── hutool-db ├── test.db └── src │ ├── main │ └── java │ │ └── cn │ │ └── hutool │ │ └── db │ │ ├── ds │ │ ├── c3p0 │ │ │ └── package-info.java │ │ ├── dbcp │ │ │ └── package-info.java │ │ ├── jndi │ │ │ └── package-info.java │ │ ├── druid │ │ │ └── package-info.java │ │ ├── hikari │ │ │ └── package-info.java │ │ ├── package-info.java │ │ ├── tomcat │ │ │ └── package-info.java │ │ ├── pooled │ │ │ └── package-info.java │ │ ├── simple │ │ │ └── package-info.java │ │ └── bee │ │ │ └── package-info.java │ │ ├── sql │ │ └── package-info.java │ │ ├── transaction │ │ └── package-info.java │ │ ├── dialect │ │ ├── package-info.java │ │ └── impl │ │ │ ├── package-info.java │ │ │ └── Sqlite3Dialect.java │ │ ├── nosql │ │ ├── mongo │ │ │ └── package-info.java │ │ ├── package-info.java │ │ └── redis │ │ │ └── package-info.java │ │ ├── meta │ │ └── package-info.java │ │ ├── handler │ │ └── package-info.java │ │ └── package-info.java │ └── test │ ├── resources │ ├── simplelogger.properties │ └── logback.xml │ └── java │ └── cn │ └── hutool │ └── db │ ├── GlobalDbConfigTest.java │ ├── PageResultTest.java │ ├── nosql │ ├── RedisDSTest.java │ └── MongoDBTest.java │ ├── PageTest.java │ └── dialect │ └── DriverUtilTest.java ├── hutool-setting └── src │ ├── test │ └── resources │ │ ├── test_with_bom.setting │ │ ├── issue3008.properties │ │ ├── example │ │ ├── group-set-example.set │ │ └── example.set │ │ ├── test.yaml │ │ ├── test.setting │ │ └── to_bean_test.properties │ └── main │ └── java │ └── cn │ └── hutool │ └── setting │ ├── yaml │ └── package-info.java │ ├── dialect │ └── package-info.java │ ├── profile │ └── package-info.java │ └── package-info.java ├── hutool-jwt └── src │ └── main │ └── java │ └── cn │ └── hutool │ └── jwt │ ├── package-info.java │ └── signers │ └── package-info.java ├── hutool-poi └── src │ ├── test │ ├── resources │ │ ├── aaa.xls │ │ ├── aaa.xlsx │ │ ├── test.xls │ │ ├── I5Q1TW.xlsx │ │ ├── alias.xlsx │ │ ├── readBySax.xls │ │ ├── merge_test.xlsx │ │ ├── priceIndex.xls │ │ ├── 1899bug_demo.xlsx │ │ ├── UserProjectDO.xlsx │ │ ├── read_row_npe.xlsx │ │ ├── blankAndDateTest.xlsx │ │ ├── cell_editor_test.xlsx │ │ ├── data_for_sax_test.xls │ │ ├── null_cell_test.xlsx │ │ └── data_for_sax_test.xlsx │ └── java │ │ └── cn │ │ └── hutool │ │ └── poi │ │ ├── excel │ │ ├── OrderExcel.java │ │ ├── TestBean.java │ │ ├── WorkbookUtilTest.java │ │ ├── CellUtilTest.java │ │ └── IssueIB0EJ9Test.java │ │ └── ofd │ │ └── OfdWriterTest.java │ └── main │ └── java │ └── cn │ └── hutool │ └── poi │ ├── word │ └── package-info.java │ ├── exceptions │ └── package-info.java │ ├── excel │ ├── editors │ │ ├── package-info.java │ │ ├── NumericToIntEditor.java │ │ └── TrimEditor.java │ ├── cell │ │ ├── package-info.java │ │ ├── setters │ │ │ └── package-info.java │ │ ├── CellValue.java │ │ ├── CellSetter.java │ │ ├── CellHandler.java │ │ └── CellEditor.java │ ├── package-info.java │ ├── sax │ │ ├── package-info.java │ │ └── handler │ │ │ └── package-info.java │ ├── style │ │ ├── package-info.java │ │ └── Align.java │ └── reader │ │ ├── package-info.java │ │ └── SheetReader.java │ ├── ofd │ └── package-info.java │ └── package-info.java ├── hutool-crypto └── src │ ├── test │ ├── resources │ │ ├── asn1.key │ │ ├── test_ec_public_key.pem │ │ ├── test_ec_sec1_private_key.pem │ │ ├── test_ec_pkcs8_private_key.key │ │ ├── test_ec_encrypted_private_key.key │ │ └── test_ec_certificate_request.csr │ └── java │ │ └── cn │ │ └── hutool │ │ └── crypto │ │ ├── Issue3512Test.java │ │ ├── digest │ │ └── BCryptTest.java │ │ ├── asymmetric │ │ └── Issue3925Test.java │ │ └── symmetric │ │ └── PBKDF2Test.java │ └── main │ └── java │ └── cn │ └── hutool │ └── crypto │ ├── digest │ ├── package-info.java │ ├── otp │ │ └── package-info.java │ └── mac │ │ └── package-info.java │ ├── asymmetric │ └── package-info.java │ ├── symmetric │ └── package-info.java │ └── package-info.java ├── .github ├── FUNDING.yml └── ISSUE_TEMPLATE.md ├── hutool-aop └── src │ └── main │ ├── java │ └── cn │ │ └── hutool │ │ └── aop │ │ ├── proxy │ │ └── package-info.java │ │ ├── package-info.java │ │ ├── interceptor │ │ └── package-info.java │ │ └── aspects │ │ └── package-info.java │ └── resources │ └── META-INF │ └── services │ └── cn.hutool.aop.proxy.ProxyFactory ├── hutool-script └── src │ ├── test │ └── resources │ │ └── filter1.js │ └── main │ └── java │ └── cn │ └── hutool │ └── script │ └── package-info.java ├── hutool-captcha └── src │ └── main │ └── java │ └── cn │ └── hutool │ └── captcha │ ├── package-info.java │ └── generator │ └── package-info.java ├── hutool-http └── src │ ├── main │ └── java │ │ └── cn │ │ └── hutool │ │ └── http │ │ ├── body │ │ └── package-info.java │ │ ├── ssl │ │ ├── package-info.java │ │ ├── DefaultSSLFactory.java │ │ └── TrustAnyHostnameVerifier.java │ │ ├── cookie │ │ └── package-info.java │ │ ├── server │ │ ├── package-info.java │ │ ├── filter │ │ │ ├── package-info.java │ │ │ └── SimpleFilter.java │ │ ├── handler │ │ │ └── package-info.java │ │ └── action │ │ │ └── package-info.java │ │ ├── useragent │ │ ├── package-info.java │ │ └── UserAgentUtil.java │ │ ├── webservice │ │ └── package-info.java │ │ ├── package-info.java │ │ └── Method.java │ └── test │ ├── resources │ └── html │ │ ├── index.html │ │ └── formForUpload.html │ └── java │ └── cn │ └── hutool │ └── http │ ├── HttpGlobalConfigTest.java │ ├── server │ ├── Issue3568Test.java │ ├── DocServerTest.java │ ├── BlankServerTest.java │ └── ExceptionServerTest.java │ ├── IssueIB7REWTest.java │ └── HTMLFilterTest.java ├── hutool-cache └── src │ ├── main │ └── java │ │ └── cn │ │ └── hutool │ │ └── cache │ │ ├── impl │ │ └── package-info.java │ │ ├── file │ │ └── package-info.java │ │ ├── package-info.java │ │ └── CacheListener.java │ └── test │ └── java │ └── cn │ └── hutool │ └── cache │ └── FileCacheTest.java ├── hutool-json └── src │ ├── main │ └── java │ │ └── cn │ │ └── hutool │ │ └── json │ │ ├── package-info.java │ │ ├── xml │ │ └── package-info.java │ │ ├── serialize │ │ ├── package-info.java │ │ ├── JSONObjectSerializer.java │ │ ├── JSONArraySerializer.java │ │ └── JSONDeserializer.java │ │ ├── JSONString.java │ │ └── JSONBeanParser.java │ └── test │ ├── java │ └── cn │ │ └── hutool │ │ └── json │ │ ├── test │ │ └── bean │ │ │ ├── Data.java │ │ │ ├── TokenAuthWarp2.java │ │ │ ├── KeyBean.java │ │ │ ├── ADT.java │ │ │ ├── Price.java │ │ │ ├── TokenAuthResponse.java │ │ │ ├── UserC.java │ │ │ ├── UserWithMap.java │ │ │ ├── JSONBean.java │ │ │ ├── UserB.java │ │ │ ├── Seq.java │ │ │ ├── UserA.java │ │ │ ├── Exam.java │ │ │ ├── TokenAuthWarp.java │ │ │ ├── UUMap.java │ │ │ ├── ResultBean.java │ │ │ ├── UserInfoRedundCount.java │ │ │ ├── ExamInfoDict.java │ │ │ └── JsonNode.java │ │ ├── IssueID418BTest.java │ │ ├── IssueIAP4GMTest.java │ │ ├── issueIVMD5 │ │ └── BaseResult.java │ │ ├── Issue2997Test.java │ │ ├── Issue3759Test.java │ │ ├── Issue3649Test.java │ │ ├── Issue2953Test.java │ │ ├── IssueI84V6ITest.java │ │ ├── IssueI6H0XFTest.java │ │ └── xml │ │ └── Issue2748Test.java │ └── resources │ ├── issue1200.json │ └── issueI676IT.json ├── hutool-socket └── src │ └── main │ └── java │ └── cn │ └── hutool │ └── socket │ ├── aio │ ├── package-info.java │ └── SimpleIoAction.java │ ├── nio │ ├── package-info.java │ └── ChannelHandler.java │ ├── package-info.java │ └── protocol │ ├── package-info.java │ ├── MsgEncoder.java │ └── Protocol.java ├── hutool-log └── src │ ├── main │ ├── java │ │ └── cn │ │ │ └── hutool │ │ │ └── log │ │ │ ├── dialect │ │ │ ├── package-info.java │ │ │ ├── jdk │ │ │ │ └── package-info.java │ │ │ ├── log4j │ │ │ │ └── package-info.java │ │ │ ├── slf4j │ │ │ │ └── package-info.java │ │ │ ├── console │ │ │ │ └── package-info.java │ │ │ ├── jboss │ │ │ │ └── package-info.java │ │ │ ├── log4j2 │ │ │ │ └── package-info.java │ │ │ ├── logtube │ │ │ │ └── package-info.java │ │ │ ├── commons │ │ │ │ └── package-info.java │ │ │ └── tinylog │ │ │ │ └── package-info.java │ │ │ ├── level │ │ │ └── package-info.java │ │ │ └── package-info.java │ └── resources │ │ └── META-INF │ │ └── services │ │ └── cn.hutool.log.LogFactory │ └── test │ ├── resources │ ├── log4j.properties │ └── logback.xml │ └── java │ └── cn │ └── hutool │ └── log │ └── test │ └── LogTubeTest.java ├── hutool-cron └── src │ ├── main │ └── java │ │ └── cn │ │ └── hutool │ │ └── cron │ │ ├── listener │ │ ├── package-info.java │ │ └── SimpleTaskListener.java │ │ ├── pattern │ │ ├── package-info.java │ │ ├── parser │ │ │ └── package-info.java │ │ └── matcher │ │ │ ├── PartMatcher.java │ │ │ └── package-info.java │ │ ├── task │ │ ├── package-info.java │ │ ├── RunnableTask.java │ │ └── Task.java │ │ ├── timingwheel │ │ └── package-info.java │ │ └── package-info.java │ └── test │ └── java │ └── cn │ └── hutool │ └── cron │ └── demo │ ├── JobMainTest.java │ └── TestJob2.java ├── hutool-bloomFilter └── src │ └── main │ └── java │ └── cn │ └── hutool │ └── bloomfilter │ ├── bitMap │ └── package-info.java │ ├── package-info.java │ └── filter │ ├── package-info.java │ ├── JSFilter.java │ ├── RSFilter.java │ ├── FNVFilter.java │ ├── PJWFilter.java │ ├── HfFilter.java │ ├── HfIpFilter.java │ ├── SDBMFilter.java │ ├── ELFFilter.java │ ├── TianlFilter.java │ └── DefaultFilter.java ├── hutool-system └── src │ ├── main │ └── java │ │ └── cn │ │ └── hutool │ │ └── system │ │ ├── package-info.java │ │ └── oshi │ │ └── package-info.java │ └── test │ └── java │ └── cn │ └── hutool │ └── system │ └── OshiPrintTest.java ├── .gitee └── ISSUE_TEMPLATE.zh-CN.md ├── hutool-dfa └── src │ └── main │ └── java │ └── cn │ └── hutool │ └── dfa │ ├── package-info.java │ └── SensitiveProcessor.java ├── hutool-ai └── src │ └── main │ └── resources │ └── META-INF │ └── services │ ├── cn.hutool.ai.core.AIConfig │ └── cn.hutool.ai.core.AIServiceProvider ├── .editorconfig ├── .gitignore ├── SECURITY.md ├── hutool-all └── src │ └── main │ └── java │ └── cn │ └── hutool │ └── package-info.java └── .travis.yml /docs/.nojekyll: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bin/version.txt: -------------------------------------------------------------------------------- 1 | 5.8.42 2 | -------------------------------------------------------------------------------- /docs/js/version.js: -------------------------------------------------------------------------------- 1 | var version = '5.8.42' -------------------------------------------------------------------------------- /hutool-core/src/test/resources/text.txt: -------------------------------------------------------------------------------- 1 | 1 2 | -------------------------------------------------------------------------------- /bin/test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | exec mvn test 4 | -------------------------------------------------------------------------------- /hutool-core/src/test/resources/test-zip/test-add/test.txt: -------------------------------------------------------------------------------- 1 | 1 -------------------------------------------------------------------------------- /bin/deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mvn clean deploy -P release 4 | -------------------------------------------------------------------------------- /hutool-extra/src/test/resources/templates/enjoy_test.etl: -------------------------------------------------------------------------------- 1 | #(x + 123) -------------------------------------------------------------------------------- /hutool-extra/src/test/resources/templates/velocity_test.vtl: -------------------------------------------------------------------------------- 1 | 你好,$name -------------------------------------------------------------------------------- /hutool-extra/src/test/resources/templates/beetl_test.btl: -------------------------------------------------------------------------------- 1 | hello,${name} -------------------------------------------------------------------------------- /bin/cobertura.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | exec mvn -T 1 cobertura:cobertura 4 | -------------------------------------------------------------------------------- /hutool-extra/src/test/resources/templates/freemarker_test.ftl: -------------------------------------------------------------------------------- 1 | hello,${name} -------------------------------------------------------------------------------- /hutool-extra/src/test/resources/templates/jetbrick_test.jetx: -------------------------------------------------------------------------------- 1 | 你好,${name} 2 | -------------------------------------------------------------------------------- /hutool-extra/src/test/resources/templates/issue3488.ftl: -------------------------------------------------------------------------------- 1 | hello,${paymentInfo} 2 | -------------------------------------------------------------------------------- /hutool-core/src/test/resources/issueI91VF1.csv: -------------------------------------------------------------------------------- 1 | 主机,用户名,密码 2 | 192.168.1.1,admin,123 3 | -------------------------------------------------------------------------------- /hutool-db/test.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-db/test.db -------------------------------------------------------------------------------- /hutool-extra/src/test/resources/templates/rythm_test.tmpl: -------------------------------------------------------------------------------- 1 | @args String name 2 | hello,@name -------------------------------------------------------------------------------- /hutool-extra/src/test/resources/templates/thymeleaf_test.ttl: -------------------------------------------------------------------------------- 1 |

-------------------------------------------------------------------------------- /bin/commit.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | git add . 4 | git commit -am "$1" 5 | 6 | bin/push_dev.sh 7 | -------------------------------------------------------------------------------- /hutool-core/src/test/resources/test.csv: -------------------------------------------------------------------------------- 1 | # 这是一行注释,读取时应忽略 2 | "sss,sss",姓名,"性别",关注"对象",年龄,"",""" 3 | -------------------------------------------------------------------------------- /hutool-core/src/test/resources/issueIA8WE0.csv: -------------------------------------------------------------------------------- 1 | c1_text1,"c1_text2 2 | #c1_text2_line2",c1_text3 3 | -------------------------------------------------------------------------------- /hutool-extra/src/test/resources/templates/wit_test.wit: -------------------------------------------------------------------------------- 1 | <% 2 | var name; 3 | %> 4 | hello,${name} 5 | -------------------------------------------------------------------------------- /hutool-setting/src/test/resources/test_with_bom.setting: -------------------------------------------------------------------------------- 1 | [line1] 2 | key1 = value1 3 | key2 = value2 4 | -------------------------------------------------------------------------------- /hutool-core/src/test/resources/test_bean.csv: -------------------------------------------------------------------------------- 1 | 姓名,gender,focus,age 2 | 张三,男,无,33 3 | 李四,男,好对象,23 4 | 王妹妹,女,特别关注,22 -------------------------------------------------------------------------------- /bin/simple_install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | exec mvn -T 1C clean install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true 4 | -------------------------------------------------------------------------------- /hutool-core/src/test/resources/test_lines_cr.csv: -------------------------------------------------------------------------------- 1 | # 这是一行注释,读取时应忽略 a,b,c,d 1,2,3,4 # 这是一行注释,读取时应忽略 q,w,e,r,"我是一段 带换行的内容" a,s,d,f -------------------------------------------------------------------------------- /hutool-setting/src/test/resources/issue3008.properties: -------------------------------------------------------------------------------- 1 | person.hobby[0]=LOL 2 | person.hobby[1]=KFC 3 | person.hobby[2]=COFFE 4 | -------------------------------------------------------------------------------- /hutool-core/src/test/resources/1_psi_index_0.txt: -------------------------------------------------------------------------------- 1 | 0 2 | 1 3 | 2 4 | 3 5 | 4 6 | 5 7 | 6 8 | 7 9 | 8 10 | 9 11 | 10 -------------------------------------------------------------------------------- /hutool-jwt/src/main/java/cn/hutool/jwt/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * JSON Web Token (JWT)封装 3 | */ 4 | package cn.hutool.jwt; 5 | -------------------------------------------------------------------------------- /hutool-jwt/src/main/java/cn/hutool/jwt/signers/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * JWT签名封装 3 | */ 4 | package cn.hutool.jwt.signers; 5 | -------------------------------------------------------------------------------- /hutool-poi/src/test/resources/aaa.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-poi/src/test/resources/aaa.xls -------------------------------------------------------------------------------- /hutool-poi/src/test/resources/aaa.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-poi/src/test/resources/aaa.xlsx -------------------------------------------------------------------------------- /hutool-poi/src/test/resources/test.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-poi/src/test/resources/test.xls -------------------------------------------------------------------------------- /bin/sync.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | git checkout v5-dev 4 | git pull osc v5-dev 5 | git pull origin v5-dev 6 | git pull gitcode v5-dev 7 | -------------------------------------------------------------------------------- /hutool-core/src/test/resources/hutool.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-core/src/test/resources/hutool.jpg -------------------------------------------------------------------------------- /hutool-crypto/src/test/resources/asn1.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-crypto/src/test/resources/asn1.key -------------------------------------------------------------------------------- /hutool-poi/src/test/resources/I5Q1TW.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-poi/src/test/resources/I5Q1TW.xlsx -------------------------------------------------------------------------------- /hutool-poi/src/test/resources/alias.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-poi/src/test/resources/alias.xlsx -------------------------------------------------------------------------------- /hutool-poi/src/test/resources/readBySax.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-poi/src/test/resources/readBySax.xls -------------------------------------------------------------------------------- /bin/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | exec mvn -T 1C clean source:jar javadoc:javadoc install -Dmaven.test.skip=false -Dmaven.javadoc.skip=false 4 | -------------------------------------------------------------------------------- /bin/package.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | exec mvn -T 1C clean source:jar javadoc:javadoc package -Dmaven.test.skip=false -Dmaven.javadoc.skip=false 4 | -------------------------------------------------------------------------------- /hutool-poi/src/test/resources/merge_test.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-poi/src/test/resources/merge_test.xlsx -------------------------------------------------------------------------------- /hutool-poi/src/test/resources/priceIndex.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-poi/src/test/resources/priceIndex.xls -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [looly] 4 | custom: ['https://gitee.com/chinabugotech/hutool'] 5 | -------------------------------------------------------------------------------- /hutool-aop/src/main/java/cn/hutool/aop/proxy/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 代理实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.aop.proxy; -------------------------------------------------------------------------------- /hutool-core/src/test/resources/test-zip/test.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-core/src/test/resources/test-zip/test.zip -------------------------------------------------------------------------------- /hutool-core/src/test/resources/test_lines.csv: -------------------------------------------------------------------------------- 1 | # 这是一行注释,读取时应忽略 2 | a,b,c,d 3 | 1,2,3,4 4 | # 这是一行注释,读取时应忽略 5 | q,w,e,r,"我是一段 6 | 带换行的内容" 7 | a,s,d,f 8 | -------------------------------------------------------------------------------- /hutool-extra/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | cn.hutool.extra.spring.SpringUtil 2 | -------------------------------------------------------------------------------- /hutool-extra/src/test/resources/image/hutool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-extra/src/test/resources/image/hutool.png -------------------------------------------------------------------------------- /hutool-poi/src/test/resources/1899bug_demo.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-poi/src/test/resources/1899bug_demo.xlsx -------------------------------------------------------------------------------- /hutool-poi/src/test/resources/UserProjectDO.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-poi/src/test/resources/UserProjectDO.xlsx -------------------------------------------------------------------------------- /hutool-poi/src/test/resources/read_row_npe.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-poi/src/test/resources/read_row_npe.xlsx -------------------------------------------------------------------------------- /hutool-script/src/test/resources/filter1.js: -------------------------------------------------------------------------------- 1 | function filter1(a, b) { 2 | if (a > b) { 3 | return a > b; 4 | } 5 | return false; 6 | } -------------------------------------------------------------------------------- /hutool-captcha/src/main/java/cn/hutool/captcha/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 图片验证码实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.captcha; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/clone/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 克隆封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.clone; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/net/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 网络相关工具 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.net; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Hutool核心方法及数据结构包 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core; -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/ds/c3p0/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * C3P0封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.db.ds.c3p0; -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/ds/dbcp/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * DBCP封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.db.ds.dbcp; -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/ds/jndi/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * JNDI封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.db.ds.jndi; -------------------------------------------------------------------------------- /hutool-db/src/test/resources/simplelogger.properties: -------------------------------------------------------------------------------- 1 | org.slf4j.simpleLogger.defaultLogLevel = debug 2 | org.slf4j.simpleLogger.log.com.zaxxer.hikari = info -------------------------------------------------------------------------------- /hutool-http/src/main/java/cn/hutool/http/body/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 请求体封装实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.http.body; -------------------------------------------------------------------------------- /hutool-http/src/main/java/cn/hutool/http/ssl/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * SSL封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.http.ssl; -------------------------------------------------------------------------------- /hutool-poi/src/test/resources/blankAndDateTest.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-poi/src/test/resources/blankAndDateTest.xlsx -------------------------------------------------------------------------------- /hutool-poi/src/test/resources/cell_editor_test.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-poi/src/test/resources/cell_editor_test.xlsx -------------------------------------------------------------------------------- /hutool-poi/src/test/resources/data_for_sax_test.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-poi/src/test/resources/data_for_sax_test.xls -------------------------------------------------------------------------------- /hutool-poi/src/test/resources/null_cell_test.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-poi/src/test/resources/null_cell_test.xlsx -------------------------------------------------------------------------------- /hutool-aop/src/main/java/cn/hutool/aop/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * JDK动态代理封装,提供非IOC下的切面支持 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.aop; -------------------------------------------------------------------------------- /hutool-cache/src/main/java/cn/hutool/cache/impl/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供各种缓存实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.cache.impl; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/img/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 图像处理相关工具类封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.img; -------------------------------------------------------------------------------- /hutool-core/src/test/resources/test-compile/a/A.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-core/src/test/resources/test-compile/a/A.class -------------------------------------------------------------------------------- /hutool-core/src/test/resources/test-compile/b/B.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-core/src/test/resources/test-compile/b/B.class -------------------------------------------------------------------------------- /hutool-core/src/test/resources/test-compile/b/B.java: -------------------------------------------------------------------------------- 1 | package b; 2 | import a.A; 3 | 4 | public class B { 5 | public B() { 6 | new A(); 7 | } 8 | } -------------------------------------------------------------------------------- /hutool-core/src/test/resources/test-compile/c/C.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-core/src/test/resources/test-compile/c/C.class -------------------------------------------------------------------------------- /hutool-core/src/test/resources/test_lines_crlf.csv: -------------------------------------------------------------------------------- 1 | # 这是一行注释,读取时应忽略 2 | a,b,c,d 3 | 1,2,3,4 4 | # 这是一行注释,读取时应忽略 5 | q,w,e,r,"我是一段 6 | 带换行的内容" 7 | a,s,d,f 8 | -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/ds/druid/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Druid封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.db.ds.druid; -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/ds/hikari/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Hikari封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.db.ds.hikari; -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/ds/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 数据源封装,对各类数据库连接池的封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.db.ds; -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/sql/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * SQL语句和Statement构建封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.db.sql; -------------------------------------------------------------------------------- /hutool-json/src/main/java/cn/hutool/json/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * JSON封装,基于json.org官方库改造 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.json; -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/word/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * POI中对Word操作封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.poi.word; -------------------------------------------------------------------------------- /hutool-poi/src/test/resources/data_for_sax_test.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-poi/src/test/resources/data_for_sax_test.xlsx -------------------------------------------------------------------------------- /hutool-socket/src/main/java/cn/hutool/socket/aio/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * AIO相关封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.socket.aio; -------------------------------------------------------------------------------- /hutool-socket/src/main/java/cn/hutool/socket/nio/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * NIO相关封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.socket.nio; -------------------------------------------------------------------------------- /hutool-socket/src/main/java/cn/hutool/socket/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Socket套接字相关工具类封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.socket; -------------------------------------------------------------------------------- /hutool-aop/src/main/java/cn/hutool/aop/interceptor/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 代理拦截器实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.aop.interceptor; -------------------------------------------------------------------------------- /hutool-cache/src/main/java/cn/hutool/cache/file/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供针对文件的缓存实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.cache.file; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/codec/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * BaseN以及BCD编码封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.codec; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/swing/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Swing和awt相关封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.swing; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/thread/lock/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 锁的实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.thread.lock; -------------------------------------------------------------------------------- /hutool-core/src/test/resources/test-compile/a/A$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-core/src/test/resources/test-compile/a/A$1.class -------------------------------------------------------------------------------- /hutool-core/src/test/resources/test-compile/c/C.java: -------------------------------------------------------------------------------- 1 | package c; 2 | 3 | import b.B; 4 | 5 | public class C { 6 | public C() { 7 | new B(); 8 | } 9 | } -------------------------------------------------------------------------------- /hutool-core/src/test/resources/test-zip/addFile.txt: -------------------------------------------------------------------------------- 1 | this file will be used to add into the test.zip 2 | before the add action, the test.zip won't have this file. 3 | -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/ds/tomcat/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Tomcat-Pool封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.db.ds.tomcat; -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/transaction/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 事务相关类和操作 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.db.transaction; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/cglib/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Cglib库方法封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.cglib; -------------------------------------------------------------------------------- /hutool-http/src/main/java/cn/hutool/http/cookie/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 自定义Cookie 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.http.cookie; -------------------------------------------------------------------------------- /hutool-http/src/main/java/cn/hutool/http/server/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Http服务器封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.http.server; -------------------------------------------------------------------------------- /hutool-log/src/main/java/cn/hutool/log/dialect/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 第三方日志库的实现封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.log.dialect; -------------------------------------------------------------------------------- /hutool-log/src/main/java/cn/hutool/log/level/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 按照日志级别定义的日志打印接口定义 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.log.level; -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/exceptions/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * POI相关异常 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.poi.exceptions; -------------------------------------------------------------------------------- /hutool-aop/src/main/java/cn/hutool/aop/aspects/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 切面实现,提供一些基本的切面实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.aop.aspects; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/getter/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * getXXX方法的接口和抽象实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.getter; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/hash/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供Hash算法的封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.lang.hash; -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/ds/pooled/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Hutool对连接池的简单实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.db.ds.pooled; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/spring/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Spring相关工具封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.spring; -------------------------------------------------------------------------------- /hutool-http/src/main/java/cn/hutool/http/useragent/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * User-Agent解析 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.http.useragent; -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/excel/editors/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 单元格值编辑器,内部使用 3 | * @author looly 4 | * 5 | */ 6 | package cn.hutool.poi.excel.editors; -------------------------------------------------------------------------------- /bin/fast_install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | exec mvn -T 1C clean source:jar javadoc:javadoc install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Dmaven.compile.fork=true 4 | -------------------------------------------------------------------------------- /hutool-cache/src/main/java/cn/hutool/cache/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供简易的缓存实现,此模块参考了jodd工具中的Cache模块 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.cache; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/io/checksum/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * IO校验相关库和工具 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.io.checksum; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/net/multipart/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 文件上传封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.net.multipart; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/net/url/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * URL相关工具 3 | * 4 | * @author looly 5 | * @since 5.3.1 6 | */ 7 | package cn.hutool.core.net.url; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/stream/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Java8的stream相关封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.stream; 8 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/text/escape/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供各种转义和反转义实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.text.escape; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/text/replacer/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 文本替换类抽象及实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.text.replacer; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/thread/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供线程及高并发封装,入口为ThreadUtil 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.thread; -------------------------------------------------------------------------------- /hutool-cron/src/main/java/cn/hutool/cron/listener/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 定时任务执行监听接口及部分实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.cron.listener; -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/dialect/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 数据库方言封装,包括数据库方言以及方言自动识别等 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.db.dialect; -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/ds/simple/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * JDBC中DriverManager简易封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.db.ds.simple; -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/nosql/mongo/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * MongoDB数据库操作的封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.db.nosql.mongo; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/expression/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 表达式语言引擎封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.expression; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/pinyin/engine/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 拼音具体实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.pinyin.engine; -------------------------------------------------------------------------------- /hutool-http/src/main/java/cn/hutool/http/server/filter/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * {@link com.sun.net.httpserver.Filter} 实现包装 3 | */ 4 | package cn.hutool.http.server.filter; -------------------------------------------------------------------------------- /hutool-json/src/main/java/cn/hutool/json/xml/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * JSON与XML相互转换封装,基于json.org官方库改造 3 | * 4 | * @author looly 5 | */ 6 | package cn.hutool.json.xml; 7 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/test/bean/Data.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.test.bean; 2 | 3 | @lombok.Data 4 | public class Data { 5 | private Price Price; 6 | } 7 | -------------------------------------------------------------------------------- /hutool-log/src/main/java/cn/hutool/log/dialect/jdk/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * JDK-Logging的实现封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.log.dialect.jdk; -------------------------------------------------------------------------------- /hutool-log/src/main/java/cn/hutool/log/dialect/log4j/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Log4j的实现封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.log.dialect.log4j; -------------------------------------------------------------------------------- /hutool-log/src/main/java/cn/hutool/log/dialect/slf4j/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Slf4j的实现封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.log.dialect.slf4j; -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/excel/cell/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Excel中单元格相关类,入口为CellUtil 3 | * @author looly 4 | * 5 | */ 6 | package cn.hutool.poi.excel.cell; -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/excel/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * POI中对Excel读写的封装,入口为ExcelUtil 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.poi.excel; -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/excel/sax/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Sax方式操作Excel方式的封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.poi.excel.sax; -------------------------------------------------------------------------------- /hutool-socket/src/main/java/cn/hutool/socket/protocol/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 消息协议接口及实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.socket.protocol; -------------------------------------------------------------------------------- /hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/bitMap/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * BitMap实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.bloomfilter.bitMap; -------------------------------------------------------------------------------- /hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 布隆过滤,提供一些Hash算法的布隆过滤 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.bloomfilter; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/annotation/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 注解包,提供增强型注解和注解工具类 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.annotation; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/bean/copier/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Bean拷贝实现,包括拷贝选项等 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.bean.copier; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/compiler/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 运行时编译java源码,动态从字符串或外部文件加载类 3 | * 4 | * @author : Lzpeng 5 | */ 6 | package cn.hutool.core.compiler; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/compress/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 压缩解压封装 3 | * 4 | * @author looly 5 | * @since 5.7.8 6 | */ 7 | package cn.hutool.core.compress; 8 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/generator/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供生成器接口及相关封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.lang.generator; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/id/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供各种ID生成 3 | * 4 | * @author looly 5 | * @since 5.7.5 6 | */ 7 | package cn.hutool.core.lang.id; 8 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/map/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Map相关封装,提供特殊Map实现以及Map工具MapUtil 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.map; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/math/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供数学计算相关封装,包括排列组合等,入口为MathUtil 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.math; -------------------------------------------------------------------------------- /hutool-core/src/test/resources/test.properties: -------------------------------------------------------------------------------- 1 | #-------------------------------------------- 2 | # 配置文件测试 3 | #-------------------------------------------- 4 | 5 | a = 1 6 | b = 2 -------------------------------------------------------------------------------- /hutool-cron/src/main/java/cn/hutool/cron/pattern/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 定时任务表达式解析,核心为CronPattern 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.cron.pattern; -------------------------------------------------------------------------------- /hutool-crypto/src/main/java/cn/hutool/crypto/digest/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 摘要加密算法实现,入口为DigestUtil 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.crypto.digest; -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/nosql/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * NoSQL封装,包括Redis和MongoDB等数据库操作的封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.db.nosql; -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/nosql/redis/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Redis(Jedis)数据库操作的封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.db.nosql.redis; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/ftp/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 基于Apache Commons Net封装的FTP工具 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.ftp; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/pinyin/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 拼音工具封装,入口为PinyinUtil 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.pinyin; 8 | -------------------------------------------------------------------------------- /hutool-extra/src/test/resources/templates/velocity_test_gbk.vtl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-extra/src/test/resources/templates/velocity_test_gbk.vtl -------------------------------------------------------------------------------- /hutool-http/src/main/java/cn/hutool/http/server/handler/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * {@link com.sun.net.httpserver.HttpHandler} 实现包装 3 | */ 4 | package cn.hutool.http.server.handler; -------------------------------------------------------------------------------- /hutool-http/src/main/java/cn/hutool/http/webservice/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Webservice客户端封装实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.http.webservice; -------------------------------------------------------------------------------- /hutool-json/src/main/java/cn/hutool/json/serialize/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * JSON自定义序列化和反序列化接口和默认实现 3 | * 4 | * @author Looly 5 | * 6 | */ 7 | package cn.hutool.json.serialize; -------------------------------------------------------------------------------- /hutool-log/src/main/java/cn/hutool/log/dialect/console/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 控制台输出的实现封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.log.dialect.console; -------------------------------------------------------------------------------- /hutool-log/src/main/java/cn/hutool/log/dialect/jboss/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * jboss-logging实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.log.dialect.jboss; -------------------------------------------------------------------------------- /hutool-log/src/main/java/cn/hutool/log/dialect/log4j2/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Log4j2的实现封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.log.dialect.log4j2; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/builder/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 建造者工具
3 | * 用于建造特定对象或结果 4 | * 5 | * @author looly 6 | * 7 | */ 8 | package cn.hutool.core.builder; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/comparator/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 各种比较器(Comparator)实现和封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.comparator; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/date/format/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供线程安全的日期格式的格式化和解析实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.date.format; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/date/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 日期封装,日期的核心为DateTime类,DateUtil提供日期操作的入口 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.date; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/io/copy/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * IO流拷贝相关封装相关封装 3 | * 4 | * @author looly 5 | * @since 5.7.8 6 | */ 7 | package cn.hutool.core.io.copy; 8 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/io/file/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 对文件读写的封装,包括文件拷贝、文件读取、文件写出、行处理等 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.io.file; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/loader/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 加载器的抽象接口和实现,包括懒加载的实现等 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.lang.loader; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/text/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供文本相关操作的封装,还包括Unicode工具UnicodeUtil 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.text; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/util/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供各种工具方法,按照归类入口为XXXUtil,如字符串工具StrUtil等 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.util; -------------------------------------------------------------------------------- /hutool-core/src/test/resources/test-compile/a/A$InnerClass.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chinabugotech/hutool/HEAD/hutool-core/src/test/resources/test-compile/a/A$InnerClass.class -------------------------------------------------------------------------------- /hutool-cron/src/main/java/cn/hutool/cron/pattern/parser/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 定时任务表达式解析器,内部使用 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.cron.pattern.parser; -------------------------------------------------------------------------------- /hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 非对称加密的实现,包括RSA等 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.crypto.asymmetric; -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/meta/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * JDBC数据表元数据信息封装,包括表结构、列信息的封装,入口为MetaUtil 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.db.meta; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/mail/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 邮件封装,基于javax-mail库,入口为MailUtil 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.mail; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/qrcode/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 二维码封装,基于zxing库,入口为QrCodeUtil 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.qrcode; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/ssh/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Jsch封装,包括端口映射、SFTP封装等,入口为JschUtil 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.ssh; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/template/engine/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 第三方模板引擎实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.template.engine; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 第三方分词引擎实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.tokenizer.engine; -------------------------------------------------------------------------------- /hutool-extra/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | # Auto Configure 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 3 | cn.hutool.extra.spring.SpringUtil 4 | -------------------------------------------------------------------------------- /hutool-http/src/test/resources/html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Hutool

5 |

Simple Server of Hutool

6 | 7 | -------------------------------------------------------------------------------- /hutool-log/src/main/java/cn/hutool/log/dialect/logtube/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * LogTube的实现封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.log.dialect.logtube; 8 | -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/excel/style/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Excel样式封装,入口为:StyleUtil 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.poi.excel.style; -------------------------------------------------------------------------------- /hutool-setting/src/main/java/cn/hutool/setting/yaml/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * YAML文件的读写封装,基于snakeyaml 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.setting.yaml; 8 | -------------------------------------------------------------------------------- /hutool-system/src/main/java/cn/hutool/system/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * System模块主要获取系统、JVM、内存、CPU等信息,以便动态监测系统状态 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.system; -------------------------------------------------------------------------------- /hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 各种Hash算法的过滤器实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.bloomfilter.filter; -------------------------------------------------------------------------------- /hutool-captcha/src/main/java/cn/hutool/captcha/generator/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 验证码生成策略实现 3 | * 4 | * @author looly 5 | * @since 4.1.2 6 | */ 7 | package cn.hutool.captcha.generator; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/annotation/scanner/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 注解包扫描封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.annotation.scanner; 8 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/exceptions/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 特殊异常封装,同时提供异常工具ExceptionUtil 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.exceptions; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/reflect/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供反射相关功能对象和类 3 | * 4 | * @author looly 5 | * @since 5.4.2 6 | */ 7 | package cn.hutool.core.lang.reflect; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/swing/clipboard/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 剪贴板相关的工具,包括剪贴板监听等 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.swing.clipboard; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/thread/threadlocal/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * ThreadLocal相关封装 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.thread.threadlocal; -------------------------------------------------------------------------------- /hutool-crypto/src/main/java/cn/hutool/crypto/symmetric/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 对称加密算法实现,包括AES、DES、DESede等 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.crypto.symmetric; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/expression/engine/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 表达式语言引擎封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.expression.engine; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/template/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 第三方模板引擎封装,提供统一的接口用于适配第三方模板引擎 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.template; -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/excel/sax/handler/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Sax读取中行处理器的定义和实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.poi.excel.sax.handler; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Bean值提供者方式封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.bean.copier.provider; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/bean/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Bean相关操作,包括Bean信息描述,Bean路径表达式、动态Bean、Bean工具等 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.bean; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/date/chinese/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 农历相关类汇总,包括农历月、天干地支、农历节日、24节气等 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.date.chinese; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/io/checksum/crc16/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * CRC16相关算法封装为Checksum 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.io.checksum.crc16; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/io/watch/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 基于JDK7+ WatchService的文件和目录监听封装,支持多级目录 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.io.watch; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/ansi/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 命令行终端中ANSI 转义序列相关封装,如ANSI颜色等 3 | * 4 | * @author spring, looly 5 | */ 6 | package cn.hutool.core.lang.ansi; 7 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/map/multi/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 多参数类型的Map实现,包括集合类型值的Map和Table 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.map.multi; 8 | -------------------------------------------------------------------------------- /hutool-script/src/main/java/cn/hutool/script/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Script模块主要针对Java的javax.script封装,可以运行Javascript脚本。 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.script; -------------------------------------------------------------------------------- /hutool-setting/src/main/java/cn/hutool/setting/dialect/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 配置文件实现封装,例如Properties封装Props 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.setting.dialect; 8 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/io/file/visitor/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * FileVisitor功能性实现,包括递归删除、拷贝等 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.io.file.visitor; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/io/watch/watchers/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 文件监听中的观察者实现类,包括延迟处理、处理链等 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.io.watch.watchers; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/caller/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 调用者接口及实现。可以通过此类的方法获取调用者、多级调用者以及判断是否被调用 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.lang.caller; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/copier/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 拷贝抽象实现,通过抽象拷贝,可以实现文件、流、Buffer之间的拷贝实现 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.lang.copier; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/mutable/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供可变值对象的封装,用于封装int、long等不可变值,使其可变 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.lang.mutable; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 语言特性包,包括大量便捷的数据结构,例如验证器Validator,分布式ID生成器Snowflake等 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.lang; -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/ds/bee/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * BeeCP封装 3 | * 见:https://github.com/Chris2018998/BeeCP 4 | * 5 | * @author looly 6 | * 7 | */ 8 | package cn.hutool.db.ds.bee; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/tokenizer/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 中文分词封装
3 | * 通过定义统一接口,适配第三方分词引擎 4 | * 5 | * @author looly 6 | * 7 | */ 8 | package cn.hutool.extra.tokenizer; -------------------------------------------------------------------------------- /hutool-log/src/main/java/cn/hutool/log/dialect/commons/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Apache-Commons-Logging日志库的实现封装 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.log.dialect.commons; -------------------------------------------------------------------------------- /hutool-setting/src/main/java/cn/hutool/setting/profile/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 配置环境封装,例如Profile可以自定义不同环境下的配置文件位置 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.setting.profile; 8 | -------------------------------------------------------------------------------- /hutool-aop/src/main/resources/META-INF/services/cn.hutool.aop.proxy.ProxyFactory: -------------------------------------------------------------------------------- 1 | cn.hutool.aop.proxy.CglibProxyFactory 2 | cn.hutool.aop.proxy.SpringCglibProxyFactory 3 | cn.hutool.aop.proxy.JdkProxyFactory -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/io/resource/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 针对ClassPath和文件中资源读取的封装,主要入口为工具类ResourceUtil 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.io.resource; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/io/unit/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 数据单位相关封装,包括DataUnit数据单位和DataSize数据大小 3 | * 4 | * @author looly 5 | * @since 5.3.10 6 | */ 7 | package cn.hutool.core.io.unit; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/emoji/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 基于https://github.com/vdurmont/emoji-java的Emoji表情工具类 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.emoji; -------------------------------------------------------------------------------- /hutool-http/src/main/java/cn/hutool/http/server/action/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * {@link com.sun.net.httpserver.HttpServer} 封装 3 | * 4 | * @author looly 5 | */ 6 | package cn.hutool.http.server.action; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/convert/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 万能类型转换器以及各种类型转换的实现类,其中Convert为转换器入口,提供各种toXXX方法和convert方法 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.convert; -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/handler/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * JDBC结果集(ResultSet)转换封装,通过实现RsHandler接口,将ResultSet转换为我们想要的数据类型 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.db.handler; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/validation/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 基于JSR-380标准的校验工具类,封装了javax.validation的API 3 | * 4 | * @author chengqiang 5 | */ 6 | package cn.hutool.extra.validation; 7 | -------------------------------------------------------------------------------- /hutool-setting/src/main/java/cn/hutool/setting/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Setting模块主要针对Properties文件读写做封装,同时定义一套自己的配置文件规范,实现兼容性良好的配置工具。 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.setting; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/convert/impl/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 各种类型转换的实现类,其都为Converter接口的实现,用于将未知的Object类型转换为指定类型 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.convert.impl; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/img/gif/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * GIF处理,来自:https://github.com/rtyley/animated-gif-lib-for-java 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.img.gif; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/servlet/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Servlet封装,包括Servlet参数获取、文件上传、Response写出等,入口为ServletUtil 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.servlet; -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/ofd/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 开放版式文档(Open Fixed-layout Document )封装,基于ofdrw(https://gitee.com/Trisia/ofdrw) 3 | * 4 | * @author looly 5 | */ 6 | package cn.hutool.poi.ofd; -------------------------------------------------------------------------------- /hutool-system/src/main/java/cn/hutool/system/oshi/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Oshi库封装
3 | * https://github.com/oshi/oshi 4 | * 5 | * @author Looly 6 | * @since 4.6.4 7 | */ 8 | package cn.hutool.system.oshi; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/collection/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 集合以及Iterator封装,包括集合工具CollUtil,Iterator和Iterable工具IterUtil 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.collection; -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/dialect/impl/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 数据库方言实现,包括MySQL、Oracle、PostgreSQL、Sqlite3、H2、SqlServer2012等 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.db.dialect.impl; -------------------------------------------------------------------------------- /hutool-http/src/main/java/cn/hutool/http/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Hutool-http针对JDK的HttpUrlConnection做一层封装,简化了HTTPS请求、文件上传、Cookie记忆等操作,使Http请求变得无比简单。 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.http; -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/excel/reader/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 数据读取接口及实现,此包中定义了SheetReader,通过实现此接口,实现sheet中的数据读取为不同类型。 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.poi.excel.reader; -------------------------------------------------------------------------------- /bin/check_dependency_updates.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #-------------------------------------- 4 | # Check dependency, thanks to t-io 5 | #-------------------------------------- 6 | 7 | mvn versions:display-dependency-updates 8 | -------------------------------------------------------------------------------- /hutool-core/src/test/resources/test-compile/error/ErrorClazz.java: -------------------------------------------------------------------------------- 1 | package error; 2 | 3 | public class ErrorClazz { 4 | 5 | public static void 123main(String[] args) { 6 | System.out.println("hello world"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/template/engine/beetl/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Beetl实现,模板引擎介绍见:http://ibeetl.com/ 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.template.engine.beetl; 8 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/io/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * IO相关封装和工具类,包括Inputstream和OutputStream实现类,工具包括流工具IoUtil、文件工具FileUtil和Buffer工具BufferUtil 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.core.io; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/expression/engine/jexl/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Jexl3引擎封装,见:https://github.com/apache/commons-jexl 3 | * 4 | * @author looly 5 | */ 6 | package cn.hutool.extra.expression.engine.jexl; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 由于Hutool的原则是不依赖于其它配置文件,但是很多时候我们需要针对第三方非常棒的库做一些工具类化的支持,因此Hutoo-extra包主要用于支持第三方库的工具类支持。 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/template/engine/rythm/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Rythm实现,见:http://www.rythmengine.org/ 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.template.engine.rythm; 8 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/template/engine/wit/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Wit实现,见:http://zqq90.github.io/webit-script/ 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.template.engine.wit; 8 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/test/bean/TokenAuthWarp2.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.test.bean; 2 | 3 | public class TokenAuthWarp2 extends TokenAuthWarp { 4 | private static final long serialVersionUID = 1L; 5 | } 6 | -------------------------------------------------------------------------------- /hutool-log/src/main/java/cn/hutool/log/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Hutool-log只是一个日志的通用门面,功能类似于Slf4j。
3 | * 根据加入ClassPath中的jar包动态检测日志实现的方式,使日志使用更加便利灵活。 4 | * 5 | * @author looly 6 | * 7 | */ 8 | package cn.hutool.log; 9 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/template/engine/velocity/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Velocity实现
3 | * 见:http://velocity.apache.org/ 4 | * 5 | * @author looly 6 | */ 7 | package cn.hutool.extra.template.engine.velocity; -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/excel/cell/setters/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Excel中单元格设置相关类,一些{@link cn.hutool.poi.excel.cell.CellSetter}的实现类 3 | * 4 | * @author looly 5 | */ 6 | package cn.hutool.poi.excel.cell.setters; 7 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/expression/engine/rhino/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * rhino引擎封装
3 | * 见:https://github.com/mozilla/rhino 4 | * 5 | * @author lzpeng 6 | */ 7 | package cn.hutool.extra.expression.engine.rhino; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/template/engine/enjoy/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Jfinal家的Enjoy模板引擎实现,见:https://jfinal.com/doc/6-1 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.template.engine.enjoy; 8 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/template/engine/thymeleaf/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Thymeleaf实现,见:https://www.thymeleaf.org/ 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.template.engine.thymeleaf; 8 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/word/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Word分词引擎实现
3 | * 项目地址:https://github.com/ysc/word 4 | * 5 | * @author looly 6 | * 7 | */ 8 | package cn.hutool.extra.tokenizer.engine.word; -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/test/bean/KeyBean.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.test.bean; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class KeyBean{ 7 | private String akey; 8 | private String bkey; 9 | } 10 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/text/csv/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供CSV文件读写的封装,入口为CsvUtil
3 | * 规范见:https://datatracker.ietf.org/doc/html/rfc4180 4 | * 5 | * @author looly 6 | * 7 | */ 8 | package cn.hutool.core.text.csv; 9 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/expression/engine/jfireel/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * JfireEL引擎封装
3 | * 见:https://gitee.com/eric_ds/jfireEL 4 | * 5 | * @author looly 6 | */ 7 | package cn.hutool.extra.expression.engine.jfireel; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/template/engine/freemarker/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Freemarker实现
3 | * 见:https://freemarker.apache.org/ 4 | * 5 | * @author looly 6 | */ 7 | package cn.hutool.extra.template.engine.freemarker; -------------------------------------------------------------------------------- /hutool-log/src/main/java/cn/hutool/log/dialect/tinylog/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * tinylog的实现封装
3 | * 封装包括TinyLog和TinyLog2 4 | * 5 | * @author looly 6 | */ 7 | package cn.hutool.log.dialect.tinylog; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/intern/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 规范化表示形式封装
3 | * 所谓规范化,即当两个对象equals时,规范化的对象则可以实现==
4 | * 此包中的相关封装类似于 String#intern() 5 | * 6 | * @author looly 7 | */ 8 | package cn.hutool.core.lang.intern; -------------------------------------------------------------------------------- /hutool-crypto/src/test/resources/test_ec_public_key.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEl142zvur2O73Q+Wl6IthDB1KtIrS 3 | PJBuhTd3ICwRRaHpcstycV/eIe0aR+MpaTVF3kTbs79VXD2tOp7DdTo01g== 4 | -----END PUBLIC KEY----- 5 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/expression/engine/aviator/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Aviator引擎封装,见:https://github.com/killme2008/aviatorscript 3 | * 4 | * @author looly 5 | * 6 | */ 7 | package cn.hutool.extra.expression.engine.aviator; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/ansj/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Ansj分词实现
3 | * 项目地址:https://github.com/NLPchina/ansj_seg 4 | * 5 | * @author looly 6 | * 7 | */ 8 | package cn.hutool.extra.tokenizer.engine.ansj; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/hanlp/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * HanLP分词引擎实现
3 | * 项目地址:https://github.com/hankcs/HanLP 4 | * 5 | * @author looly 6 | * 7 | */ 8 | package cn.hutool.extra.tokenizer.engine.hanlp; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/jcseg/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Jcseg分词引擎实现
3 | * 项目地址:https://gitee.com/lionsoul/jcseg 4 | * 5 | * @author looly 6 | * 7 | */ 8 | package cn.hutool.extra.tokenizer.engine.jcseg; -------------------------------------------------------------------------------- /hutool-http/src/main/java/cn/hutool/http/Method.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.http; 2 | 3 | /** 4 | * Http方法枚举 5 | * 6 | * @author Looly 7 | */ 8 | public enum Method { 9 | GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE, CONNECT, PATCH 10 | } 11 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/test/bean/ADT.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.test.bean; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | @Data 8 | public class ADT { 9 | private List BookingCode; 10 | } 11 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/test/bean/Price.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.test.bean; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | @Data 8 | public class Price { 9 | private List> ADT; 10 | } 11 | -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/excel/style/Align.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.poi.excel.style; 2 | 3 | /** 4 | * 对齐方式枚举 5 | * 6 | * @author looly 7 | * @since 4.1.0 8 | */ 9 | public enum Align { 10 | LEFT, RIGHT, CENTER 11 | } 12 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.util; 2 | 3 | /** 4 | * 对象工具类,同{@link ObjectUtil}
5 | * 从6.x开始,将删除ObjectUtil,而使用ObjUtil 6 | * 7 | */ 8 | public class ObjUtil extends ObjectUtil{ 9 | } 10 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/jieba/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Jieba分词引擎实现
3 | * 项目地址:https://github.com/huaban/jieba-analysis 4 | * 5 | * @author looly 6 | * 7 | */ 8 | package cn.hutool.extra.tokenizer.engine.jieba; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/mmseg/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * mmseg4j分词引擎实现
3 | * 项目地址:https://github.com/chenlb/mmseg4j-core 4 | * 5 | * @author looly 6 | * 7 | */ 8 | package cn.hutool.extra.tokenizer.engine.mmseg; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/expression/engine/mvel/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * MVEL (MVFLEX Expression Language)引擎封装
3 | * 见:https://github.com/mvel/mvel 4 | * 5 | * @author looly 6 | */ 7 | package cn.hutool.extra.expression.engine.mvel; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/expression/engine/qlexpress/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * QLExpress引擎封装
3 | * 见:https://github.com/alibaba/QLExpress 4 | * 5 | * @author looly 6 | */ 7 | package cn.hutool.extra.expression.engine.qlexpress; 8 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/test/bean/TokenAuthResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.test.bean; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class TokenAuthResponse { 7 | private String token; 8 | private String userId; 9 | } 10 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/test/bean/UserC.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.test.bean; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class UserC { 7 | private Integer id; 8 | private String name; 9 | private String prop; 10 | } 11 | -------------------------------------------------------------------------------- /hutool-poi/src/test/java/cn/hutool/poi/excel/OrderExcel.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.poi.excel; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class OrderExcel { 7 | private String id; 8 | private String num; 9 | private String body; 10 | } 11 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/template/engine/jetbrick/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * jetbrick-template实现,模板引擎介绍见:https://github.com/subchen/jetbrick-template-2x 3 | * 4 | * @author looly 5 | */ 6 | package cn.hutool.extra.template.engine.jetbrick; 7 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/test/bean/UserWithMap.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.test.bean; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.Map; 6 | 7 | @Data 8 | public class UserWithMap { 9 | private Map data; 10 | } 11 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/ikanalyzer/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * IKAnalyzer分词引擎实现
3 | * 项目地址:https://github.com/yozhao/IKAnalyzer 4 | * 5 | * @author looly 6 | * 7 | */ 8 | package cn.hutool.extra.tokenizer.engine.ikanalyzer; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/mynlp/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * MYNLP 中文NLP工具包分词实现
3 | * 项目地址:https://github.com/mayabot/mynlp/ 4 | * 5 | * @author Looly 6 | * @since 4.6.5 7 | */ 8 | package cn.hutool.extra.tokenizer.engine.mynlp; -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/ansi/ForeOrBack.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang.ansi; 2 | 3 | /** 4 | * 区分前景还是背景 5 | */ 6 | public enum ForeOrBack{ 7 | 8 | /** 9 | * 前景 10 | */ 11 | FORE, 12 | /** 13 | * 背景 14 | */ 15 | BACK, 16 | } 17 | -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * POI封装实现
3 | * Java针对MS Office的操作的库屈指可数,比较有名的就是Apache的POI库。
4 | * 这个库异常强大,但是使用起来也并不容易。Hutool针对POI封装一些常用工具,使Java操作Excel等文件变得异常简单。 5 | * 6 | * @author looly 7 | * 8 | */ 9 | package cn.hutool.poi; -------------------------------------------------------------------------------- /hutool-db/src/test/java/cn/hutool/db/GlobalDbConfigTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.db; 2 | 3 | import org.junit.jupiter.api.Test; 4 | 5 | public class GlobalDbConfigTest { 6 | @Test 7 | void createDbSettingTest(){ 8 | GlobalDbConfig.createDbSetting(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/test/bean/JSONBean.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.test.bean; 2 | 3 | import cn.hutool.json.JSONObject; 4 | import lombok.Data; 5 | 6 | @Data 7 | public class JSONBean { 8 | private int code; 9 | private JSONObject data; 10 | } 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### 版本情况 2 | 3 | JDK版本: openjdk_8_201 4 | hutool版本: 5.X.X(请确保最新尝试是否还有问题) 5 | 6 | ### 问题描述(包括截图) 7 | 8 | 1. 复现代码 9 | 10 | ```java 11 | Console.log("报错了"); 12 | ``` 13 | 14 | 2. 堆栈信息 15 | 16 | 3. 测试涉及到的文件(注意脱密) 17 | 18 | 比如报错的Excel文件,有问题的图片等。 -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Hutool-db是一个在JDBC基础上封装的数据库操作工具类,通过包装,使用ActiveRecord思想操作数据库。
3 | * 在Hutool-db中,使用Entity(本质上是个Map)代替Bean来使数据库操作更加灵活,同时提供Bean和Entity的转换提供传统ORM的兼容支持。 4 | * 5 | * @author looly 6 | * 7 | */ 8 | package cn.hutool.db; -------------------------------------------------------------------------------- /.gitee/ISSUE_TEMPLATE.zh-CN.md: -------------------------------------------------------------------------------- 1 | ### 版本情况 2 | 3 | JDK版本: openjdk_8_201 4 | hutool版本: 5.X.X(请确保最新尝试是否还有问题) 5 | 6 | ### 问题描述(包括截图) 7 | 8 | 1. 复现代码 9 | 10 | ```java 11 | Console.log("报错了"); 12 | ``` 13 | 14 | 2. 堆栈信息 15 | 16 | 3. 测试涉及到的文件(注意脱密) 17 | 18 | 比如报错的Excel文件,有问题的图片等。 -------------------------------------------------------------------------------- /hutool-http/src/test/java/cn/hutool/http/HttpGlobalConfigTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.http; 2 | 3 | import org.junit.jupiter.api.Test; 4 | 5 | public class HttpGlobalConfigTest { 6 | @Test 7 | public void allowPatchTest() { 8 | HttpGlobalConfig.allowPatch(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/test/bean/UserB.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.test.bean; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.Date; 6 | 7 | @Data 8 | public class UserB { 9 | private String name; 10 | private String b; 11 | private Date date; 12 | } 13 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/collection/CollectionUtil.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.collection; 2 | 3 | /** 4 | * 集合相关工具类,包括数组,是 {@link CollUtil} 的别名工具类 5 | * 6 | * @author xiaoleilu 7 | * @see CollUtil 8 | */ 9 | public class CollectionUtil extends CollUtil{ 10 | } 11 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/expression/engine/spel/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Spring-Expression引擎封装
3 | * 见:https://github.com/spring-projects/spring-framework/tree/master/spring-expression 4 | * 5 | * @author looly 6 | */ 7 | package cn.hutool.extra.expression.engine.spel; -------------------------------------------------------------------------------- /hutool-cron/src/main/java/cn/hutool/cron/task/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 定时任务中作业的抽象封装和实现,包括Runnable实现和反射实现
3 | * {@link cn.hutool.cron.task.Task}表示一个具体的任务,当满足时间匹配要求时,会执行{@link cn.hutool.cron.task.Task#execute()}方法。 4 | * 5 | * @author looly 6 | * 7 | */ 8 | package cn.hutool.cron.task; 9 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/analysis/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Lucene-analysis分词抽象封装
3 | * 项目地址:https://github.com/apache/lucene-solr/tree/master/lucene/analysis 4 | * 5 | * @author looly 6 | * 7 | */ 8 | package cn.hutool.extra.tokenizer.engine.analysis; -------------------------------------------------------------------------------- /hutool-setting/src/test/resources/example/group-set-example.set: -------------------------------------------------------------------------------- 1 | #-------------------------------------- 2 | # GroupSet配置文件样例 3 | #每一个分组下有一组set集合 4 | # author xiaoleilu 5 | #-------------------------------------- 6 | 7 | [group1] 8 | value1 9 | value2 10 | 11 | [group2] 12 | value1 13 | value2 -------------------------------------------------------------------------------- /hutool-crypto/src/test/resources/test_ec_sec1_private_key.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN EC PRIVATE KEY----- 2 | MHcCAQEEIBGZnOjXWLvFM6c4V9W3Ec31gZXBoJz7an1bEc1312f+oAoGCCqGSM49 3 | AwEHoUQDQgAEl142zvur2O73Q+Wl6IthDB1KtIrSPJBuhTd3ICwRRaHpcstycV/e 4 | Ie0aR+MpaTVF3kTbs79VXD2tOp7DdTo01g== 5 | -----END EC PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/test/bean/Seq.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.test.bean; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class Seq { 7 | private String seq; 8 | 9 | public Seq() { 10 | } 11 | 12 | public Seq(String seq) { 13 | this.seq = seq; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-dfa/src/main/java/cn/hutool/dfa/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * DFA全称为:Deterministic Finite Automaton,即确定有穷自动机。
3 | * 解释起来原理其实也不难,就是用所有关键字构造一棵树,然后用正文遍历这棵树,遍历到叶子节点即表示文章中存在这个关键字。
4 | * 我们暂且忽略构建关键词树的时间,每次查找正文只需要O(n)复杂度就可以搞定。
5 | * 6 | * @author looly 7 | * 8 | */ 9 | package cn.hutool.dfa; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/compress/archiver/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 基于commons-compress的打包(压缩)封装 3 | * 4 | *

5 | * 见:https://commons.apache.org/proper/commons-compress/ 6 | *

7 | * 8 | * @author looly 9 | * 10 | */ 11 | package cn.hutool.extra.compress.archiver; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/compress/extractor/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 基于commons-compress的解包(解压缩)封装 3 | * 4 | *

5 | * 见:https://commons.apache.org/proper/commons-compress/ 6 | *

7 | * 8 | * @author looly 9 | * 10 | */ 11 | package cn.hutool.extra.compress.extractor; -------------------------------------------------------------------------------- /bin/javadoc.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #exec mvn javadoc:javadoc 4 | 5 | # 多模块聚合文档,生成在target/site/apidocs 6 | exec mvn javadoc:aggregate 7 | 8 | bin_home="$(dirname ${BASH_SOURCE[0]})" 9 | 10 | # 拷贝自定义的index.html到聚合文档目录 11 | cp -vf $bin_home/../docs/apidocs/index.html $bin_home/../target/reports/apidocs/ 12 | -------------------------------------------------------------------------------- /hutool-extra/src/test/java/cn/hutool/extra/ftp/SimpleFtpServerTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.extra.ftp; 2 | 3 | public class SimpleFtpServerTest { 4 | 5 | public static void main(String[] args) { 6 | SimpleFtpServer 7 | .create() 8 | .addAnonymous("d:/test/ftp/") 9 | .start(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /hutool-log/src/test/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootLogger=debug,STDOUT 2 | 3 | log4j.additivity.org.apache=true 4 | log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender 5 | log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout 6 | log4j.appender.STDOUT.layout.ConversionPattern=[%d{HH:mm:ss,SSS}][%5p] %c:%L - %m%n -------------------------------------------------------------------------------- /hutool-ai/src/main/resources/META-INF/services/cn.hutool.ai.core.AIConfig: -------------------------------------------------------------------------------- 1 | cn.hutool.ai.model.hutool.HutoolConfig 2 | cn.hutool.ai.model.deepseek.DeepSeekConfig 3 | cn.hutool.ai.model.openai.OpenaiConfig 4 | cn.hutool.ai.model.doubao.DoubaoConfig 5 | cn.hutool.ai.model.grok.GrokConfig 6 | cn.hutool.ai.model.ollama.OllamaConfig 7 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/io/LineHandler.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.io; 2 | 3 | /** 4 | * 行处理器 5 | * @author Looly 6 | * 7 | */ 8 | @FunctionalInterface 9 | public interface LineHandler { 10 | /** 11 | * 处理一行数据,可以编辑后存入指定地方 12 | * @param line 行 13 | */ 14 | void handle(String line); 15 | } 16 | -------------------------------------------------------------------------------- /hutool-http/src/main/java/cn/hutool/http/ssl/DefaultSSLFactory.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.http.ssl; 2 | 3 | /** 4 | * 默认的SSLSocketFactory 5 | * 6 | * @author Looly 7 | * @since 5.1.2 8 | */ 9 | public class DefaultSSLFactory extends CustomProtocolsSSLFactory { 10 | 11 | public DefaultSSLFactory() { 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/Filter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang; 2 | 3 | /** 4 | * 过滤器接口 5 | * 6 | * @author Looly 7 | */ 8 | @FunctionalInterface 9 | public interface Filter { 10 | /** 11 | * 是否接受对象 12 | * 13 | * @param t 检查的对象 14 | * @return 是否接受对象 15 | */ 16 | boolean accept(T t); 17 | } -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/copier/Copier.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang.copier; 2 | 3 | /** 4 | * 拷贝接口 5 | * @author Looly 6 | * 7 | * @param 拷贝目标类型 8 | */ 9 | @FunctionalInterface 10 | public interface Copier { 11 | /** 12 | * 执行拷贝 13 | * @return 拷贝的目标 14 | */ 15 | T copy(); 16 | } 17 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/io/watch/SimpleWatcher.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.io.watch; 2 | 3 | import cn.hutool.core.io.watch.watchers.IgnoreWatcher; 4 | 5 | /** 6 | * 空白WatchListener
7 | * 用户继承此类后实现需要监听的方法 8 | * @author Looly 9 | * 10 | */ 11 | public class SimpleWatcher extends IgnoreWatcher{ 12 | 13 | } 14 | -------------------------------------------------------------------------------- /hutool-cron/src/test/java/cn/hutool/cron/demo/JobMainTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.cron.demo; 2 | 3 | import cn.hutool.cron.CronUtil; 4 | 5 | /** 6 | * 定时任务样例 7 | */ 8 | public class JobMainTest { 9 | 10 | public static void main(String[] args) { 11 | CronUtil.setMatchSecond(true); 12 | CronUtil.start(false); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /hutool-crypto/src/test/java/cn/hutool/crypto/Issue3512Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.crypto; 2 | 3 | import cn.hutool.crypto.asymmetric.SignAlgorithm; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class Issue3512Test { 7 | @Test 8 | public void signTest() { 9 | SecureUtil.sign(SignAlgorithm.SHA256withRSA); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /hutool-crypto/src/test/resources/test_ec_pkcs8_private_key.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgEZmc6NdYu8UzpzhX 3 | 1bcRzfWBlcGgnPtqfVsRzXfXZ/6gCgYIKoZIzj0DAQehRANCAASXXjbO+6vY7vdD 4 | 5aXoi2EMHUq0itI8kG6FN3cgLBFFoelyy3JxX94h7RpH4ylpNUXeRNuzv1VcPa06 5 | nsN1OjTW 6 | -----END PRIVATE KEY----- 7 | -------------------------------------------------------------------------------- /hutool-json/src/test/resources/issue1200.json: -------------------------------------------------------------------------------- 1 | { 2 | "items": [ 3 | [ 4 | [ 5 | { 6 | "fromAccount": "test禾信-cd09dss", 7 | "url": "https://m.baidu.com/s?wd=aaa", 8 | "fromType": "搜索推广" 9 | }, 10 | "去杭州旅游旅游攻略", 11 | "杭州旅游攻略" 12 | ] 13 | ] 14 | ] 15 | } -------------------------------------------------------------------------------- /hutool-poi/src/test/java/cn/hutool/poi/excel/TestBean.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.poi.excel; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.Date; 6 | 7 | @Data 8 | public class TestBean { 9 | private String name; 10 | private int age; 11 | private double score; 12 | private boolean isPass; 13 | private Date examDate; 14 | } 15 | -------------------------------------------------------------------------------- /hutool-ai/src/main/resources/META-INF/services/cn.hutool.ai.core.AIServiceProvider: -------------------------------------------------------------------------------- 1 | cn.hutool.ai.model.hutool.HutoolProvider 2 | cn.hutool.ai.model.deepseek.DeepSeekProvider 3 | cn.hutool.ai.model.openai.OpenaiProvider 4 | cn.hutool.ai.model.doubao.DoubaoProvider 5 | cn.hutool.ai.model.grok.GrokProvider 6 | cn.hutool.ai.model.ollama.OllamaProvider 7 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/clone/Cloneable.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.clone; 2 | 3 | /** 4 | * 克隆支持接口 5 | * @author Looly 6 | * 7 | * @param 实现克隆接口的类型 8 | */ 9 | public interface Cloneable extends java.lang.Cloneable{ 10 | 11 | /** 12 | * 克隆当前对象,浅复制 13 | * @return 克隆后的对象 14 | */ 15 | T clone(); 16 | } 17 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/test/bean/UserA.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.test.bean; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.Date; 6 | import java.util.List; 7 | 8 | @Data 9 | public class UserA { 10 | private String name; 11 | private String a; 12 | private Date date; 13 | private List sqs; 14 | } 15 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/func/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 函数封装
3 | * 接口灵感来自于ActFramework
4 | * 一个函数接口代表一个一个函数,用于包装一个函数为对象
5 | * 在JDK8之前,Java的函数并不能作为参数传递,也不能作为返回值存在,此接口用于将一个函数包装成为一个对象,从而传递对象 6 | * 7 | * @author looly 8 | * 9 | */ 10 | package cn.hutool.core.lang.func; -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/lang/IssueIAOGDRTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang; 2 | 3 | import org.junit.jupiter.api.Assertions; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class IssueIAOGDRTest { 7 | @Test 8 | void isChineseNameTest() { 9 | Assertions.assertFalse(Validator.isChineseName("张三。")); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /hutool-setting/src/test/resources/test.yaml: -------------------------------------------------------------------------------- 1 | firstName: "John" 2 | lastName: "Doe" 3 | age: 31 4 | contactDetails: 5 | - type: "mobile" 6 | number: 123456789 7 | - type: "landline" 8 | number: 456786868 9 | homeAddress: 10 | line: "Xyz, DEF Street" 11 | city: "City Y" 12 | state: "State Y" 13 | zip: 345657 14 | 123: 345 15 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/template/engine/jetbrick/loader/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * jetbrick-template实现,特殊资源加载器
3 | * 模板引擎介绍见:https://github.com/subchen/jetbrick-template-2x 4 | * 5 | * @author looly 6 | */ 7 | package cn.hutool.extra.template.engine.jetbrick.loader; 8 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/text/finder/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 文本查找实现,包括: 3 | *
    4 | *
  • 查找文本中的字符(正向、反向)
  • 5 | *
  • 查找文本中的匹配字符(正向、反向)
  • 6 | *
  • 查找文本中的字符串(正向、反向)
  • 7 | *
  • 查找文本中匹配正则的字符串(正向)
  • 8 | *
9 | * 10 | * @author looly 11 | * 12 | */ 13 | package cn.hutool.core.text.finder; 14 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/date/IssueIB9NPUTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.date; 2 | 3 | import org.junit.jupiter.api.Test; 4 | 5 | import java.text.SimpleDateFormat; 6 | 7 | public class IssueIB9NPUTest { 8 | @Test 9 | void parseTest() { 10 | DateUtil.parse("202409032400", new SimpleDateFormat("yyyyMMddHHmm")); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /hutool-core/src/test/resources/test.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | Success(成功) 8 | ok 9 | 1490 10 | 885 11 | 1 12 | 13 | -------------------------------------------------------------------------------- /hutool-crypto/src/main/java/cn/hutool/crypto/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 加密解密模块,实现了对JDK中加密解密算法的封装,入口为SecureUtil,实现了: 3 | * 4 | *
 5 |  * 1. 对称加密(symmetric),例如:AES、DES等
 6 |  * 2. 非对称加密(asymmetric),例如:RSA、DSA等
 7 |  * 3. 摘要加密(digest),例如:MD5、SHA-1、SHA-256、HMAC等
 8 |  * 
9 | * 10 | * @author looly 11 | * 12 | */ 13 | package cn.hutool.crypto; -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/ftp/FtpMode.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.extra.ftp; 2 | 3 | /** 4 | * FTP连接模式 5 | * 6 | *

7 | * 见:https://www.cnblogs.com/huhaoshida/p/5412615.html 8 | * 9 | * @author looly 10 | * @since 4.1.19 11 | */ 12 | public enum FtpMode { 13 | /** 主动模式 */ 14 | Active, 15 | /** 被动模式 */ 16 | Passive 17 | } 18 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/tokenizer/Result.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.extra.tokenizer; 2 | 3 | import cn.hutool.core.collection.IterableIter; 4 | 5 | /** 6 | * 分词结果接口定义
7 | * 实现此接口包装分词器的分词结果,通过实现Iterator相应方法获取分词中的单词 8 | * 9 | * @author looly 10 | * 11 | */ 12 | public interface Result extends IterableIter { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/test/bean/Exam.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.test.bean; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class Exam { 7 | private String id; 8 | private String examNumber; 9 | private String isAnswer; 10 | private Seq[] answerArray; 11 | private String isRight; 12 | private String isSubject; 13 | } 14 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/Matcher.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang; 2 | 3 | /** 4 | * 匹配接口 5 | * 6 | * @param 匹配的对象类型 7 | * @author Looly 8 | */ 9 | @FunctionalInterface 10 | public interface Matcher { 11 | /** 12 | * 给定对象是否匹配 13 | * 14 | * @param t 对象 15 | * @return 是否匹配 16 | */ 17 | boolean match(T t); 18 | } 19 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/swing/DesktopUtilTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.swing; 2 | 3 | import org.junit.jupiter.api.Disabled; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class DesktopUtilTest { 7 | 8 | @Test 9 | @Disabled 10 | public void browseTest() { 11 | DesktopUtil.browse("https://www.hutool.club"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/excel/cell/CellValue.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.poi.excel.cell; 2 | 3 | /** 4 | * 抽象的单元格值接口,用于判断不同类型的单元格值 5 | * 6 | * @param 值得类型 7 | * @author looly 8 | * @since 4.0.11 9 | */ 10 | public interface CellValue { 11 | 12 | /** 13 | * 获取单元格值 14 | * 15 | * @return 值 16 | */ 17 | T getValue(); 18 | } 19 | -------------------------------------------------------------------------------- /bin/push_dev.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo -e "\033[32mCheckout to v5-dev\033[0m" 4 | git checkout v5-dev 5 | 6 | echo -e "\033[32mPush to Github(origin) v5-dev\033[0m" 7 | git push origin v5-dev 8 | 9 | echo -e "\033[32mPush to Gitee v5-dev\033[0m" 10 | git push osc v5-dev 11 | 12 | echo -e "\033[32mPush to Gitcode v5-dev\033[0m" 13 | git push gitcode v5-dev 14 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/generator/Generator.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang.generator; 2 | 3 | /** 4 | * 生成器泛型接口
5 | * 通过实现此接口可以自定义生成对象的策略 6 | * 7 | * @param 生成对象类型 8 | * @since 5.4.3 9 | */ 10 | public interface Generator { 11 | 12 | /** 13 | * 生成新的对象 14 | * 15 | * @return 新的对象 16 | */ 17 | T next(); 18 | } 19 | -------------------------------------------------------------------------------- /hutool-extra/src/main/resources/META-INF/services/cn.hutool.extra.pinyin.PinyinEngine: -------------------------------------------------------------------------------- 1 | cn.hutool.extra.pinyin.engine.tinypinyin.TinyPinyinEngine 2 | cn.hutool.extra.pinyin.engine.jpinyin.JPinyinEngine 3 | cn.hutool.extra.pinyin.engine.pinyin4j.Pinyin4jEngine 4 | cn.hutool.extra.pinyin.engine.bopomofo4j.Bopomofo4jEngine 5 | cn.hutool.extra.pinyin.engine.houbbpinyin.HoubbPinyinEngine 6 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/ref/Ref.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang.ref; 2 | 3 | /** 4 | * 针对{@link java.lang.ref.Reference}的接口定义,用于扩展功能
5 | * 例如提供自定义的无需回收对象 6 | * 7 | * @param 对象类型 8 | */ 9 | @FunctionalInterface 10 | public interface Ref { 11 | 12 | /** 13 | * 获取引用的原始对象 14 | * 15 | * @return 原始对象 16 | */ 17 | T get(); 18 | } 19 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/text/csv/CsvRowHandler.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.text.csv; 2 | 3 | /** 4 | * CSV的行处理器,实现此接口用于按照行处理数据 5 | * 6 | * @author Looly 7 | * @since 5.0.4 8 | */ 9 | @FunctionalInterface 10 | public interface CsvRowHandler { 11 | 12 | /** 13 | * 处理行数据 14 | * 15 | * @param row 行数据 16 | */ 17 | void handle(CsvRow row); 18 | } 19 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/builder/Builder.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.builder; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * 建造者模式接口定义 7 | * 8 | * @param 建造对象类型 9 | * @author Looly 10 | * @since 4.2.2 11 | */ 12 | public interface Builder extends Serializable{ 13 | /** 14 | * 构建 15 | * 16 | * @return 被构建的对象 17 | */ 18 | T build(); 19 | } -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/date/IssueIC00HGTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.date; 2 | 3 | import cn.hutool.core.lang.Console; 4 | import org.junit.jupiter.api.Disabled; 5 | import org.junit.jupiter.api.Test; 6 | 7 | public class IssueIC00HGTest { 8 | @Test 9 | @Disabled 10 | void dateToStringTest(){ 11 | Console.log(DateUtil.date().toString()); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/test/bean/TokenAuthWarp.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.test.bean; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | @Getter 7 | @Setter 8 | public class TokenAuthWarp extends UUMap { 9 | private static final long serialVersionUID = 1L; 10 | 11 | private String targetUrl; 12 | private String success; 13 | } 14 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/Chain.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang; 2 | 3 | /** 4 | * 责任链接口 5 | * @author Looly 6 | * 7 | * @param 元素类型 8 | * @param 目标类类型,用于返回this对象 9 | */ 10 | public interface Chain extends Iterable{ 11 | /** 12 | * 加入责任链 13 | * @param element 责任链新的环节元素 14 | * @return this 15 | */ 16 | T addChain(E element); 17 | } 18 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/hash/Hash.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang.hash; 2 | 3 | /** 4 | * Hash计算接口 5 | * 6 | * @param 被计算hash的对象类型 7 | * @author looly 8 | * @since 5.7.15 9 | */ 10 | @FunctionalInterface 11 | public interface Hash { 12 | /** 13 | * 计算Hash值 14 | * 15 | * @param t 对象 16 | * @return hash 17 | */ 18 | Number hash(T t); 19 | } 20 | -------------------------------------------------------------------------------- /hutool-crypto/src/main/java/cn/hutool/crypto/digest/otp/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * OTP 是 One-Time Password的简写,表示一次性密码。 3 | *

4 | * 计算OTP串的公式: 5 | *

 6 |  * OTP(K,C) = Truncate(HMAC-SHA-1(K,C))
 7 |  * K:表示秘钥串
 8 |  * C:是一个数字,表示随机数
 9 |  * Truncate:是一个函数,就是怎么截取加密后的串,并取加密后串的哪些字段组成一个数字。
10 |  * 
11 | * 12 | * @author looly 13 | */ 14 | package cn.hutool.crypto.digest.otp; -------------------------------------------------------------------------------- /hutool-json/src/main/java/cn/hutool/json/serialize/JSONObjectSerializer.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.serialize; 2 | 3 | import cn.hutool.json.JSONObject; 4 | 5 | /** 6 | * 对象的序列化接口,用于将特定对象序列化为{@link JSONObject} 7 | * @param 对象类型 8 | * 9 | * @author Looly 10 | */ 11 | @FunctionalInterface 12 | public interface JSONObjectSerializer extends JSONSerializer{} 13 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/tree/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供通用树生成,特点:

3 | * 1、每个字段可自定义
4 | * 2、支持排序 树深度配置,自定义转换器等
5 | * 3、支持额外属性扩展
6 | * 4、贴心 许多属性,特性都有默认值处理
7 | * 5、使用简单 可一行代码生成树
8 | * 6、代码简洁轻量无额外依赖 9 | *

10 | * 11 | * @author liangbaikai(https://gitee.com/liangbaikai00/) 12 | * @since 5.2.1 13 | */ 14 | package cn.hutool.core.lang.tree; -------------------------------------------------------------------------------- /hutool-json/src/main/java/cn/hutool/json/serialize/JSONArraySerializer.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.serialize; 2 | 3 | import cn.hutool.json.JSONArray; 4 | 5 | /** 6 | * JSON列表的序列化接口,用于将特定对象序列化为{@link JSONArray} 7 | * 8 | * @param 对象类型 9 | * 10 | * @author Looly 11 | */ 12 | @FunctionalInterface 13 | public interface JSONArraySerializer extends JSONSerializer{} 14 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/codec/Encoder.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.codec; 2 | 3 | /** 4 | * 编码接口 5 | * 6 | * @param 被编码的数据类型 7 | * @param 编码后的数据类型 8 | * @author looly 9 | * @since 5.7.22 10 | */ 11 | public interface Encoder { 12 | 13 | /** 14 | * 执行编码 15 | * 16 | * @param data 被编码的数据 17 | * @return 编码后的数据 18 | */ 19 | R encode(T data); 20 | } 21 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/generator/UUIDGenerator.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang.generator; 2 | 3 | import cn.hutool.core.util.IdUtil; 4 | 5 | /** 6 | * UUID生成器 7 | * 8 | * @author looly 9 | * @since 5.4.3 10 | */ 11 | public class UUIDGenerator implements Generator { 12 | @Override 13 | public String next() { 14 | return IdUtil.fastUUID(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/mutable/Mutable.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang.mutable; 2 | 3 | /** 4 | * 提供可变值类型接口 5 | * 6 | * @param 值得类型 7 | * @since 3.0.1 8 | */ 9 | public interface Mutable { 10 | 11 | /** 12 | * 获得原始值 13 | * @return 原始值 14 | */ 15 | T get(); 16 | 17 | /** 18 | * 设置值 19 | * @param value 值 20 | */ 21 | void set(T value); 22 | 23 | } -------------------------------------------------------------------------------- /hutool-crypto/src/test/resources/test_ec_encrypted_private_key.key: -------------------------------------------------------------------------------- 1 | -----BEGIN EC PRIVATE KEY----- 2 | Proc-Type: 4,ENCRYPTED 3 | DEK-Info: AES-256-CBC,04b396b78c1f1172857a8b76682b63ef 4 | 5 | NoaLaSy87gLE6C3yCi7JwiB86NSYipZmMVlLIcHaBL2ECRUcGDmXEZu6OqFyrbDc 6 | XWXraEl3OieYduiVmuJ0GQ8oeWd5DNgHLBYTPnfgjBowbluAO9/R9AUh4R8Fz918 7 | /zsMZJckjSv3Gs6NWZW02v9OvhTDSJBNwu/M2WTWH10= 8 | -----END EC PRIVATE KEY----- 9 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/codec/Decoder.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.codec; 2 | 3 | /** 4 | * 解码接口 5 | * 6 | * @param 被解码的数据类型 7 | * @param 解码后的数据类型 8 | * @author looly 9 | * @since 5.7.22 10 | */ 11 | public interface Decoder { 12 | 13 | /** 14 | * 执行解码 15 | * 16 | * @param encoded 被解码的数据 17 | * @return 解码后的数据 18 | */ 19 | R decode(T encoded); 20 | } 21 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/img/FontUtilTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.img; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import java.awt.Font; 7 | 8 | public class FontUtilTest { 9 | 10 | @Test 11 | public void createFontTest(){ 12 | final Font font = FontUtil.createFont(); 13 | assertNotNull(font); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/IssueID418BTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json; 2 | 3 | import org.junit.jupiter.api.Assertions; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class IssueID418BTest { 7 | 8 | @Test 9 | void booleanToJsonTest() { 10 | Boolean dd = true; 11 | String jsonStr = JSONUtil.toJsonStr(dd); 12 | Assertions.assertEquals("true", jsonStr); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /hutool-core/src/test/resources/issueICRMKA.csv: -------------------------------------------------------------------------------- 1 | config,price,unit,package_name,package,equipment,pic_path,crawler_date,set_Discount,installment_details,installment_price,installment_time 2 | 6.3" Google Pixel 9 Pro 128 GB Beige,94999,₽,fwefwe,fewfew,"Cores - 8x(3.1 GHz), 16 GB, 1 SIM, OLED, 2856x1280, 50+48+48 MP camera, NFC, 5G, GPS, 4700 mAh more details",["https://xx.png"],2025/8/1 4:05,,gerwgrweg,fwefw,fwefwe 3 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/generator/ObjectIdGenerator.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang.generator; 2 | 3 | import cn.hutool.core.lang.ObjectId; 4 | 5 | /** 6 | * ObjectId生成器 7 | * 8 | * @author looly 9 | * @since 5.4.3 10 | */ 11 | public class ObjectIdGenerator implements Generator { 12 | @Override 13 | public String next() { 14 | return ObjectId.next(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /hutool-http/src/main/java/cn/hutool/http/server/filter/SimpleFilter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.http.server.filter; 2 | 3 | import com.sun.net.httpserver.Filter; 4 | 5 | /** 6 | * 匿名简单过滤器,跳过了描述 7 | * 8 | * @author looly 9 | * @since 5.5.7 10 | */ 11 | public abstract class SimpleFilter extends Filter { 12 | 13 | @Override 14 | public String description() { 15 | return "Anonymous Filter"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /hutool-http/src/test/resources/html/formForUpload.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 文件上传表单提交 6 | 7 | 8 |

文件上传测试

9 |
10 | 文件:
11 | 12 |
13 | 14 | -------------------------------------------------------------------------------- /hutool-json/src/main/java/cn/hutool/json/JSONString.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json; 2 | 3 | /** 4 | * {@code JSONString}接口定义了一个{@code toJSONString()}
5 | * 实现此接口的类可以通过实现{@code toJSONString()}方法来改变转JSON字符串的方式。 6 | * 7 | * @author Looly 8 | * 9 | */ 10 | public interface JSONString { 11 | 12 | /** 13 | * 自定义转JSON字符串的方法 14 | * 15 | * @return JSON字符串 16 | */ 17 | String toJSONString(); 18 | } 19 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/test/bean/UUMap.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.test.bean; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | @Data 8 | public class UUMap implements Serializable{ 9 | private static final long serialVersionUID = 1L; 10 | 11 | private T result; 12 | 13 | public static long getSerialversionuid() { 14 | return serialVersionUID; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/swing/RobotUtilTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.swing; 2 | 3 | import org.junit.jupiter.api.Disabled; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import cn.hutool.core.io.FileUtil; 7 | 8 | public class RobotUtilTest { 9 | 10 | @Test 11 | @Disabled 12 | public void captureScreenTest() { 13 | RobotUtil.captureScreen(FileUtil.file("e:/screen.jpg")); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-crypto/src/main/java/cn/hutool/crypto/digest/mac/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * HMAC,全称为“Hash Message Authentication Code”,中文名“散列消息鉴别码”
3 | * 主要是利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。
4 | * 一般的,消息鉴别码用于验证传输于两个共 同享有一个密钥的单位之间的消息。
5 | * HMAC 可以与任何迭代散列函数捆绑使用。MD5 和 SHA-1 就是这种散列函数。HMAC 还可以使用一个用于计算和确认消息鉴别值的密钥。
6 | * 7 | * @author Looly 8 | * @since 4.5.13 9 | */ 10 | package cn.hutool.crypto.digest.mac; -------------------------------------------------------------------------------- /hutool-crypto/src/test/java/cn/hutool/crypto/digest/BCryptTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.crypto.digest; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class BCryptTest { 7 | 8 | @Test 9 | public void checkpwTest(){ 10 | assertFalse(BCrypt.checkpw("xxx", 11 | "$2a$2a$10$e4lBTlZ019KhuAFyqAlgB.Jxc6cM66GwkSR/5/xXNQuHUItPLyhzy")); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /hutool-http/src/test/java/cn/hutool/http/server/Issue3568Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.http.server; 2 | 3 | import cn.hutool.http.HttpUtil; 4 | 5 | import java.io.IOException; 6 | 7 | public class Issue3568Test { 8 | public static void main(String[] args) { 9 | HttpUtil.createServer(8888) 10 | .addHandler("/", httpExchange -> { 11 | throw new IOException("111"); 12 | }) 13 | .start(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/date/IssueI82Y1LTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.date; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class IssueI82Y1LTest { 7 | @Test 8 | public void parseTest() { 9 | final String dt1 = "2023-09-14T05:00:03.648519Z"; 10 | assertEquals("2023-09-14 05:10:51", DateUtil.parse(dt1).toString()); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /hutool-db/src/test/java/cn/hutool/db/PageResultTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.db; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class PageResultTest { 7 | 8 | @Test 9 | public void isLastTest(){ 10 | // 每页2条,共10条,总共5页,第一页是0,最后一页应该是4 11 | final PageResult result = new PageResult<>(4, 2, 10); 12 | assertTrue(result.isLast()); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/util/IssueICOJVZTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.util; 2 | 3 | import org.junit.jupiter.api.Assertions; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class IssueICOJVZTest { 7 | @Test 8 | void toUnderlineTest(){ 9 | String field = "PAGE_NAME"; 10 | field = StrUtil.toUnderlineCase(field).toUpperCase(); 11 | Assertions.assertEquals("PAGE_NAME", field); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/tokenizer/TokenizerEngine.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.extra.tokenizer; 2 | 3 | /** 4 | * 分词引擎接口定义,用户通过实现此接口完成特定分词引擎的适配 5 | * 6 | * @author looly 7 | * 8 | */ 9 | public interface TokenizerEngine { 10 | 11 | /** 12 | * 文本分词处理接口,通过实现此接口完成分词,产生分词结果 13 | * 14 | * @param text 需要分词的文本 15 | * @return {@link Result}分词结果实现 16 | */ 17 | Result parse(CharSequence text); 18 | } 19 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/IssueIAP4GMTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json; 2 | 3 | import org.junit.jupiter.api.Assertions; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class IssueIAP4GMTest { 7 | @Test 8 | void parse() { 9 | String res = "{\"uid\":\"asdf\\n\"}"; 10 | final JSONObject entries = JSONUtil.parseObj(res); 11 | Assertions.assertEquals("asdf\n", entries.getStr("uid")); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /hutool-json/src/test/resources/issueI676IT.json: -------------------------------------------------------------------------------- 1 | { 2 | "page": { 3 | "pageSize": 33, 4 | "currentPage": 81, 5 | "totalSize": 49, 6 | "orderItems": [ 7 | { 8 | "asc": true, 9 | "columnName": "foo", 10 | "content": "bar1" 11 | }, 12 | { 13 | "asc": false, 14 | "columnName": "foo", 15 | "content": "bar2" 16 | } 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/intern/JdkStringInterner.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang.intern; 2 | 3 | /** 4 | * JDK中默认的字符串规范化实现 5 | * 6 | * @author looly 7 | * @since 5.4.3 8 | */ 9 | public class JdkStringInterner implements Interner{ 10 | @Override 11 | public String intern(String sample) { 12 | if(null == sample){ 13 | return null; 14 | } 15 | return sample.intern(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /hutool-db/src/test/java/cn/hutool/db/nosql/RedisDSTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.db.nosql; 2 | 3 | import cn.hutool.db.nosql.redis.RedisDS; 4 | import org.junit.jupiter.api.Disabled; 5 | import org.junit.jupiter.api.Test; 6 | import redis.clients.jedis.Jedis; 7 | 8 | public class RedisDSTest { 9 | 10 | @Test 11 | @Disabled 12 | public void redisDSTest(){ 13 | final Jedis jedis = RedisDS.create().getJedis(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/img/IssueI8L8UATest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.img; 2 | 3 | import cn.hutool.core.io.FileUtil; 4 | import org.junit.jupiter.api.Disabled; 5 | import org.junit.jupiter.api.Test; 6 | 7 | public class IssueI8L8UATest { 8 | @Test 9 | @Disabled 10 | public void convertTest() { 11 | ImgUtil.convert( 12 | FileUtil.file("d:/test/1.png"), 13 | FileUtil.file("d:/test/1.jpg")); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/issueIVMD5/BaseResult.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.issueIVMD5; 2 | 3 | import java.util.List; 4 | 5 | import lombok.Data; 6 | 7 | @Data 8 | public class BaseResult { 9 | 10 | public BaseResult() { 11 | } 12 | 13 | private int result; 14 | private List data; 15 | private E data2; 16 | private String nextDataUri; 17 | private String message; 18 | private int dataCount; 19 | 20 | } -------------------------------------------------------------------------------- /hutool-system/src/test/java/cn/hutool/system/OshiPrintTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.system; 2 | 3 | import cn.hutool.core.lang.Console; 4 | import cn.hutool.system.oshi.OshiUtil; 5 | import org.junit.jupiter.api.Disabled; 6 | import org.junit.jupiter.api.Test; 7 | 8 | @Disabled 9 | public class OshiPrintTest { 10 | 11 | @Test 12 | @Disabled 13 | public void printCpuInfo(){ 14 | Console.log(OshiUtil.getCpuInfo()); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | # 配置修改自:https://gitee.com/596392912/mica/blob/master/.editorconfig 3 | 4 | root = true 5 | 6 | [*] 7 | indent_style = tab 8 | charset = utf-8 9 | end_of_line = lf 10 | trim_trailing_whitespace = true 11 | insert_final_newline = true 12 | 13 | [*.{json,yml}] 14 | indent_style = space 15 | indent_size = 2 16 | 17 | [*.md] 18 | insert_final_newline = false 19 | trim_trailing_whitespace = false 20 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/io/ManifestUtilTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.io; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import java.util.jar.Manifest; 7 | 8 | public class ManifestUtilTest { 9 | 10 | @Test 11 | public void getManiFestTest(){ 12 | final Manifest manifest = ManifestUtil.getManifest(Test.class); 13 | assertNotNull(manifest); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/collection/ResettableIter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.collection; 2 | 3 | import java.util.Iterator; 4 | 5 | /** 6 | * 支持重置的{@link Iterator} 接口
7 | * 通过实现{@link #reset()},重置此{@link Iterator}后可实现复用重新遍历 8 | * 9 | * @param 元素类型 10 | * @since 5.8.0 11 | */ 12 | public interface ResettableIter extends Iterator { 13 | 14 | /** 15 | * 重置,重置后可重新遍历 16 | */ 17 | void reset(); 18 | } 19 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/Replacer.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang; 2 | 3 | /** 4 | * 替换器
5 | * 通过实现此接口完成指定类型对象的替换操作,替换后的目标类型依旧为指定类型 6 | * 7 | * @author looly 8 | * 9 | * @param 被替换操作的类型 10 | * @since 4.1.5 11 | */ 12 | @FunctionalInterface 13 | public interface Replacer { 14 | 15 | /** 16 | * 替换指定类型为目标类型 17 | * 18 | * @param t 被替换的对象 19 | * @return 替代后的对象 20 | */ 21 | T replace(T t); 22 | } 23 | -------------------------------------------------------------------------------- /hutool-setting/src/test/resources/example/example.set: -------------------------------------------------------------------------------- 1 | # ------------------------------------------------------------- 2 | # ----- GroupedSet File with UTF8----- 3 | # @see com.xiaoleilu.hutool.lang.GroupedSet 4 | # ------------------------------------------------------------- 5 | 6 | 无分组值1 7 | 无分组值2 8 | 9 | [分组1] 10 | 值1 11 | 值2 12 | 值3 13 | 14 | [特殊分组] 15 | 1 16 | 2 17 | 3 18 | \#转义注释符 19 | 20 | [] 21 | 空分组值1 22 | 空分组会合并到无分组里 23 | 24 | [没有值的分组] -------------------------------------------------------------------------------- /hutool-cache/src/main/java/cn/hutool/cache/CacheListener.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.cache; 2 | 3 | /** 4 | * 缓存监听,用于实现缓存操作时的回调监听,例如缓存对象的移除事件等 5 | * 6 | * @param 缓存键 7 | * @param 缓存值 8 | * @author looly 9 | * @since 5.5.2 10 | */ 11 | public interface CacheListener { 12 | 13 | /** 14 | * 对象移除回调 15 | * 16 | * @param key 键 17 | * @param cachedObject 被缓存的对象 18 | */ 19 | void onRemove(K key, V cachedObject); 20 | } 21 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/loader/Loader.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang.loader; 2 | 3 | /** 4 | * 对象加载抽象接口
5 | * 通过实现此接口自定义实现对象的加载方式,例如懒加载机制、多线程加载等 6 | * 7 | * @author looly 8 | * 9 | * @param 对象类型 10 | */ 11 | @FunctionalInterface 12 | public interface Loader { 13 | 14 | /** 15 | * 获取一个准备好的对象
16 | * 通过准备逻辑准备好被加载的对象,然后返回。在准备完毕之前此方法应该被阻塞 17 | * 18 | * @return 加载完毕的对象 19 | */ 20 | T get(); 21 | } 22 | -------------------------------------------------------------------------------- /hutool-cron/src/main/java/cn/hutool/cron/task/RunnableTask.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.cron.task; 2 | 3 | /** 4 | * {@link Runnable} 的 {@link Task}包装 5 | * @author Looly 6 | * 7 | */ 8 | public class RunnableTask implements Task{ 9 | private final Runnable runnable; 10 | 11 | public RunnableTask(Runnable runnable) { 12 | this.runnable = runnable; 13 | } 14 | 15 | @Override 16 | public void execute() { 17 | runnable.run(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /hutool-cron/src/main/java/cn/hutool/cron/timingwheel/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 时间轮实现,重写了kafka的TimingWheel
3 | * 时间轮一般会实现成一个环形结构,类似一个时钟,分为很多槽,一个槽代表一个时间间隔,每个槽使用双向链表存储定时任务。指针周期性地跳动,跳动到一个槽位,就执行该槽位的定时任务。 4 | * 5 | *

6 | * 时间轮算法介绍:https://www.confluent.io/blog/apache-kafka-purgatory-hierarchical-timing-wheels/
7 | * 参考:https://github.com/eliasyaoyc/timingwheel 8 | * 9 | * @author looly 10 | */ 11 | package cn.hutool.cron.timingwheel; 12 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/compress/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 基于commons-compress的压缩解压封装
3 | * 支持包括:gzip, bzip2, xz, lzma, Pack200, DEFLATE, Brotli, DEFLATE64, ZStandard and Z, the archiver formats are 7z,
4 | * ar, arj, cpio, dump, tar and zip等格式。 5 | * 6 | *

7 | * 见:https://commons.apache.org/proper/commons-compress/ 8 | *

9 | * 10 | * @author looly 11 | * 12 | */ 13 | package cn.hutool.extra.compress; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Eclipse 2 | .project 3 | .classpath 4 | .settings/ 5 | 6 | # Maven 7 | target/ 8 | dependency-reduced-pom.xml 9 | pom.xml.versionsBackup 10 | .factorypath 11 | 12 | # Gradle 13 | .gradle/ 14 | build/ 15 | 16 | #IDEA 17 | # idea ignore 18 | .idea/ 19 | *.ipr 20 | *.iml 21 | *.iws 22 | 23 | # temp ignore 24 | *.log 25 | *.cache 26 | *.diff 27 | *.patch 28 | *.tmp 29 | .jython_cache/ 30 | 31 | # system ignore 32 | .DS_Store 33 | Thumbs.db 34 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions(支持的版本) 4 | 5 | | Version | Supported | 6 | | ------- | ------------------ | 7 | | 5.x.x | :white_check_mark: | 8 | | 4.x.x | :x: | 9 | | 3.x.x | :x: | 10 | 11 | ## Reporting a Vulnerability(报告漏洞) 12 | 13 | 如果你发现有安全问题或漏洞,请发送邮件到`bugo@bugotech.cn`。 14 | 15 | To report any found security issues or vulnerabilities, please send a mail to `bugo@bugotech.cn`. -------------------------------------------------------------------------------- /bin/logo.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo '========================================' 4 | echo ' __ __ __ __ ' 5 | echo ' / / / /__ __ / /_ ____ ____ / / ' 6 | echo ' / /_/ // / / // __// __ \ / __ \ / / ' 7 | echo ' / __ // /_/ // /_ / /_/ // /_/ // / ' 8 | echo '/_/ /_/ \____/ \__/ \____/ \____//_/ ' 9 | echo '' 10 | echo '-----------https://hutool.cn/-----------' 11 | echo '========================================' 12 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/collection/IterableIter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.collection; 2 | 3 | import java.util.Iterator; 4 | 5 | /** 6 | * 提供合成接口,共同提供{@link Iterable}和{@link Iterator}功能 7 | * 8 | * @param 节点类型 9 | * @author looly 10 | * @since 5.7.14 11 | */ 12 | public interface IterableIter extends Iterable, Iterator { 13 | 14 | @Override 15 | default Iterator iterator() { 16 | return this; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /hutool-all/src/main/java/cn/hutool/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | *

3 | * Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。 4 | *

5 | * 6 | *

7 | * Hutool中的工具方法来自于每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;
8 | *

9 | * 10 | *

Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。

11 | * 12 | * @author looly 13 | */ 14 | package cn.hutool; 15 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/convert/IssueIALV38Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.convert; 2 | 3 | import org.junit.jupiter.api.Assertions; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import java.math.BigDecimal; 7 | 8 | public class IssueIALV38Test { 9 | @Test 10 | void name() { 11 | final Object o = Convert.convertWithCheck(BigDecimal.class, " 111啊", null, false); 12 | Assertions.assertEquals(new BigDecimal("111"), o); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/date/DateFieldTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.date; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class DateFieldTest { 7 | 8 | @Test 9 | public void ofTest() { 10 | DateField field = DateField.of(11); 11 | assertEquals(DateField.HOUR_OF_DAY, field); 12 | field = DateField.of(12); 13 | assertEquals(DateField.MINUTE, field); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/test/bean/ResultBean.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.test.bean; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | @Data 8 | public class ResultBean { 9 | public List>> items; 10 | 11 | @Data 12 | public static class ItemsBean { 13 | public DetailBean detail; 14 | 15 | @Data 16 | public static class DetailBean { 17 | public String visitorStatus; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /hutool-log/src/main/resources/META-INF/services/cn.hutool.log.LogFactory: -------------------------------------------------------------------------------- 1 | cn.hutool.log.dialect.logtube.LogTubeLogFactory 2 | cn.hutool.log.dialect.slf4j.Slf4jLogFactory 3 | cn.hutool.log.dialect.log4j2.Log4j2LogFactory 4 | cn.hutool.log.dialect.log4j.Log4jLogFactory 5 | cn.hutool.log.dialect.commons.ApacheCommonsLogFactory 6 | cn.hutool.log.dialect.tinylog.TinyLogFactory 7 | cn.hutool.log.dialect.tinylog.TinyLog2Factory 8 | cn.hutool.log.dialect.jboss.JbossLogFactory 9 | -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/excel/cell/CellSetter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.poi.excel.cell; 2 | 3 | import org.apache.poi.ss.usermodel.Cell; 4 | 5 | /** 6 | * 单元格值自定义设置器,主要用于Excel数据导出,用户通过自定义此接口,实现可定制化的单元格值设定 7 | * 8 | * @author looly 9 | * @since 5.7.8 10 | */ 11 | @FunctionalInterface 12 | public interface CellSetter { 13 | 14 | /** 15 | * 自定义单元格值设置,同时可以设置单元格样式、格式等信息 16 | * @param cell 单元格 17 | */ 18 | void setValue(Cell cell); 19 | } 20 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/convert/StringConvertTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.convert; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import java.util.TimeZone; 7 | 8 | public class StringConvertTest { 9 | 10 | @Test 11 | public void timezoneToStrTest(){ 12 | final String s = Convert.toStr(TimeZone.getTimeZone("Asia/Shanghai")); 13 | assertEquals("Asia/Shanghai", s); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-http/src/main/java/cn/hutool/http/ssl/TrustAnyHostnameVerifier.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.http.ssl; 2 | 3 | import javax.net.ssl.HostnameVerifier; 4 | import javax.net.ssl.SSLSession; 5 | 6 | /** 7 | * https 域名校验 8 | * 9 | * @author Looly 10 | */ 11 | public class TrustAnyHostnameVerifier implements HostnameVerifier { 12 | 13 | @Override 14 | public boolean verify(String hostname, SSLSession session) { 15 | return true;// 直接返回true 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /hutool-http/src/test/java/cn/hutool/http/server/DocServerTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.http.server; 2 | 3 | import cn.hutool.core.swing.DesktopUtil; 4 | import cn.hutool.http.HttpUtil; 5 | 6 | public class DocServerTest { 7 | 8 | public static void main(String[] args) { 9 | HttpUtil.createServer(80) 10 | // 设置默认根目录, 11 | .setRoot("D:\\workspace\\site\\hutool-site") 12 | .start(); 13 | 14 | DesktopUtil.browse("http://localhost/"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/Issue2997Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json; 2 | 3 | import org.junit.jupiter.api.Test; 4 | 5 | import static org.junit.jupiter.api.Assertions.assertEquals; 6 | 7 | public class Issue2997Test { 8 | @Test 9 | public void toBeanTest() { 10 | // https://github.com/chinabugotech/hutool/issues/2997 11 | final Object o = JSONUtil.toBean("{}", Object.class); 12 | assertEquals(JSONObject.class, o.getClass()); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/Issue3759Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json; 2 | 3 | import org.junit.jupiter.api.Assertions; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class Issue3759Test { 7 | @Test 8 | void parseTest() { 9 | String jsonArrayStr = "[null]"; 10 | final JSONArray objects = JSONUtil.parseArray(jsonArrayStr, 11 | JSONConfig.create().setIgnoreNullValue(true)); 12 | Assertions.assertTrue(objects.isEmpty()); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/util/IssueICA9S5Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.util; 2 | 3 | import org.junit.jupiter.api.Assertions; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import java.util.List; 7 | 8 | public class IssueICA9S5Test { 9 | @Test 10 | public void test() { 11 | String a = "ENUM{\\ndisable ~ 0\\nenable ~ 1\\n}"; 12 | final List split = StrUtil.split(a, "\\n"); 13 | Assertions.assertEquals(4, split.size()); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-cron/src/main/java/cn/hutool/cron/pattern/matcher/PartMatcher.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.cron.pattern.matcher; 2 | 3 | import cn.hutool.core.lang.Matcher; 4 | 5 | /** 6 | * 表达式中的某个位置部分匹配器
7 | * 用于匹配日期位中对应数字是否匹配 8 | * 9 | * @author Looly 10 | */ 11 | public interface PartMatcher extends Matcher { 12 | 13 | /** 14 | * 获取指定值之后的匹配值,也可以是指定值本身 15 | * 16 | * @param value 指定的值 17 | * @return 匹配到的值或之后的值 18 | */ 19 | int nextAfter(int value); 20 | } 21 | -------------------------------------------------------------------------------- /hutool-crypto/src/test/java/cn/hutool/crypto/asymmetric/Issue3925Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.crypto.asymmetric; 2 | 3 | import org.bouncycastle.crypto.DataLengthException; 4 | import org.junit.jupiter.api.Assertions; 5 | import org.junit.jupiter.api.Test; 6 | 7 | public class Issue3925Test { 8 | @Test 9 | void sm2Test() { 10 | final SM2 sm2 = new SM2(); 11 | Assertions.assertThrows(DataLengthException.class, ()->sm2.encrypt("", KeyType.PublicKey)); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /hutool-extra/src/main/resources/META-INF/services/cn.hutool.extra.expression.ExpressionEngine: -------------------------------------------------------------------------------- 1 | cn.hutool.extra.expression.engine.aviator.AviatorEngine 2 | cn.hutool.extra.expression.engine.jexl.JexlEngine 3 | cn.hutool.extra.expression.engine.mvel.MvelEngine 4 | cn.hutool.extra.expression.engine.jfireel.JfireELEngine 5 | cn.hutool.extra.expression.engine.spel.SpELEngine 6 | cn.hutool.extra.expression.engine.rhino.RhinoEngine 7 | cn.hutool.extra.expression.engine.qlexpress.QLExpressEngine 8 | -------------------------------------------------------------------------------- /hutool-json/src/main/java/cn/hutool/json/JSONBeanParser.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json; 2 | 3 | /** 4 | * 实现此接口的类可以通过实现{@code parse(value)}方法来将JSON中的值解析为此对象的值 5 | * 6 | * @author Looly 7 | * @since 5.7.8 8 | * @param 参数类型 9 | */ 10 | public interface JSONBeanParser { 11 | 12 | /** 13 | * value转Bean
14 | * 通过实现此接口,将JSON中的值填充到当前对象的字段值中,即对象自行实现JSON反序列化逻辑 15 | * 16 | * @param value 被解析的对象类型,可能为JSON或者普通String、Number等 17 | */ 18 | void parse(T value); 19 | } 20 | -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/excel/reader/SheetReader.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.poi.excel.reader; 2 | 3 | import org.apache.poi.ss.usermodel.Sheet; 4 | 5 | /** 6 | * Excel {@link Sheet}读取接口,通过实现此接口,将{@link Sheet}中的数据读取为不同类型。 7 | * 8 | * @param 读取的数据类型 9 | */ 10 | @FunctionalInterface 11 | public interface SheetReader { 12 | 13 | /** 14 | * 读取数据 15 | * 16 | * @param sheet {@link Sheet} 17 | * @return 读取结果 18 | */ 19 | T read(Sheet sheet); 20 | } 21 | -------------------------------------------------------------------------------- /hutool-poi/src/test/java/cn/hutool/poi/ofd/OfdWriterTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.poi.ofd; 2 | 3 | import cn.hutool.core.io.FileUtil; 4 | import org.junit.jupiter.api.Disabled; 5 | import org.junit.jupiter.api.Test; 6 | 7 | public class OfdWriterTest { 8 | 9 | @Test 10 | @Disabled 11 | public void writeTest(){ 12 | final OfdWriter ofdWriter = new OfdWriter(FileUtil.file("d:/test/test.ofd")); 13 | ofdWriter.addText(null, "测试文本"); 14 | ofdWriter.close(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /bin/push_master.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo -e "\033[32mCheckout to v5-master\033[0m" 4 | git checkout v5-master 5 | 6 | echo -e "\033[32mMerge v5-dev branch\033[0m" 7 | git merge v5-dev -m 'Prepare release' 8 | 9 | echo -e "\033[32mPush to Github(origin) v5-master\033[0m" 10 | git push origin v5-master 11 | 12 | echo -e "\033[32mPush to Gitee v5-master\033[0m" 13 | git push osc v5-master 14 | 15 | echo -e "\033[32mPush to Gitcode v5-master\033[0m" 16 | git push gitcode v5-master 17 | -------------------------------------------------------------------------------- /hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/JSFilter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.bloomfilter.filter; 2 | 3 | import cn.hutool.core.util.HashUtil; 4 | 5 | public class JSFilter extends FuncFilter { 6 | private static final long serialVersionUID = 1L; 7 | 8 | public JSFilter(long maxValue) { 9 | this(maxValue, DEFAULT_MACHINE_NUM); 10 | } 11 | 12 | public JSFilter(long maxValue, int machineNum) { 13 | super(maxValue, machineNum, HashUtil::jsHash); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/RSFilter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.bloomfilter.filter; 2 | 3 | import cn.hutool.core.util.HashUtil; 4 | 5 | public class RSFilter extends FuncFilter { 6 | private static final long serialVersionUID = 1L; 7 | 8 | public RSFilter(long maxValue) { 9 | this(maxValue, DEFAULT_MACHINE_NUM); 10 | } 11 | 12 | public RSFilter(long maxValue, int machineNum) { 13 | super(maxValue, machineNum, HashUtil::rsHash); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/date/ZoneUtilTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.date; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import java.time.ZoneId; 7 | import java.util.TimeZone; 8 | 9 | public class ZoneUtilTest { 10 | @Test 11 | public void toTest() { 12 | assertEquals(ZoneId.systemDefault(), ZoneUtil.toZoneId(null)); 13 | assertEquals(TimeZone.getDefault(), ZoneUtil.toTimeZone(null)); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/util/IssueIBP6T1Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.util; 2 | 3 | import org.junit.jupiter.api.Assertions; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class IssueIBP6T1Test { 7 | @SuppressWarnings("DataFlowIssue") 8 | @Test 9 | void isValidCard10Test(){ 10 | Assertions.assertEquals("true", IdcardUtil.isValidCard10("1608214(1)")[2]); 11 | Assertions.assertEquals("true", IdcardUtil.isValidCard10("1608214(1)")[2]); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /hutool-http/src/main/java/cn/hutool/http/useragent/UserAgentUtil.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.http.useragent; 2 | 3 | /** 4 | * User-Agent工具类 5 | * 6 | * @author looly 7 | * 8 | */ 9 | public class UserAgentUtil { 10 | 11 | /** 12 | * 解析User-Agent 13 | * 14 | * @param userAgentString User-Agent字符串 15 | * @return {@link UserAgent} 16 | */ 17 | public static UserAgent parse(String userAgentString) { 18 | return UserAgentParser.parse(userAgentString); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /hutool-http/src/test/java/cn/hutool/http/IssueIB7REWTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.http; 2 | 3 | import cn.hutool.core.lang.Console; 4 | import org.junit.jupiter.api.Disabled; 5 | import org.junit.jupiter.api.Test; 6 | 7 | public class IssueIB7REWTest { 8 | @Test 9 | @Disabled 10 | void getTest() { 11 | System.setProperty("jdk.tls.namedCurves", "secp256r1,secp384r1,secp521r1"); 12 | final String s = HttpUtil.get("https://ebssec.boc.cn/"); 13 | Console.log(s); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/FNVFilter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.bloomfilter.filter; 2 | 3 | import cn.hutool.core.util.HashUtil; 4 | 5 | public class FNVFilter extends FuncFilter { 6 | private static final long serialVersionUID = 1L; 7 | 8 | public FNVFilter(long maxValue) { 9 | this(maxValue, DEFAULT_MACHINE_NUM); 10 | } 11 | 12 | public FNVFilter(long maxValue, int machineNum) { 13 | super(maxValue, machineNum, HashUtil::fnvHash); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/PJWFilter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.bloomfilter.filter; 2 | 3 | import cn.hutool.core.util.HashUtil; 4 | 5 | public class PJWFilter extends FuncFilter { 6 | private static final long serialVersionUID = 1L; 7 | 8 | public PJWFilter(long maxValue) { 9 | this(maxValue, DEFAULT_MACHINE_NUM); 10 | } 11 | 12 | public PJWFilter(long maxValue, int machineNum) { 13 | super(maxValue, machineNum, HashUtil::pjwHash); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/hash/Hash32.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang.hash; 2 | 3 | /** 4 | * Hash计算接口 5 | * 6 | * @param 被计算hash的对象类型 7 | * @author looly 8 | * @since 5.2.5 9 | */ 10 | @FunctionalInterface 11 | public interface Hash32 extends Hash{ 12 | /** 13 | * 计算Hash值 14 | * 15 | * @param t 对象 16 | * @return hash 17 | */ 18 | int hash32(T t); 19 | 20 | @Override 21 | default Number hash(T t){ 22 | return hash32(t); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/hash/Hash64.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang.hash; 2 | 3 | /** 4 | * Hash计算接口 5 | * 6 | * @param 被计算hash的对象类型 7 | * @author looly 8 | * @since 5.2.5 9 | */ 10 | @FunctionalInterface 11 | public interface Hash64 extends Hash{ 12 | /** 13 | * 计算Hash值 14 | * 15 | * @param t 对象 16 | * @return hash 17 | */ 18 | long hash64(T t); 19 | 20 | @Override 21 | default Number hash(T t){ 22 | return hash64(t); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/test/bean/UserInfoRedundCount.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.test.bean; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | @Data 8 | public class UserInfoRedundCount implements Serializable { 9 | private static final long serialVersionUID = -8397291070139255181L; 10 | 11 | private String finishedRatio; // 完成率 12 | private Integer ownershipExamCount; // 自己有多少道题 13 | private Integer answeredExamCount; // 当前回答了多少道题 14 | } 15 | -------------------------------------------------------------------------------- /hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/HfFilter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.bloomfilter.filter; 2 | 3 | 4 | import cn.hutool.core.util.HashUtil; 5 | 6 | public class HfFilter extends FuncFilter { 7 | private static final long serialVersionUID = 1L; 8 | 9 | public HfFilter(long maxValue) { 10 | this(maxValue, DEFAULT_MACHINE_NUM); 11 | } 12 | 13 | public HfFilter(long maxValue, int machineNum) { 14 | super(maxValue, machineNum, HashUtil::hfHash); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/HfIpFilter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.bloomfilter.filter; 2 | 3 | import cn.hutool.core.util.HashUtil; 4 | 5 | public class HfIpFilter extends FuncFilter { 6 | private static final long serialVersionUID = 1L; 7 | 8 | public HfIpFilter(long maxValue) { 9 | this(maxValue, DEFAULT_MACHINE_NUM); 10 | } 11 | 12 | public HfIpFilter(long maxValue, int machineNum) { 13 | super(maxValue, machineNum, HashUtil::hfIpHash); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/SDBMFilter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.bloomfilter.filter; 2 | 3 | import cn.hutool.core.util.HashUtil; 4 | 5 | public class SDBMFilter extends FuncFilter { 6 | private static final long serialVersionUID = 1L; 7 | 8 | public SDBMFilter(long maxValue) { 9 | this(maxValue, DEFAULT_MACHINE_NUM); 10 | } 11 | 12 | public SDBMFilter(long maxValue, int machineNum) { 13 | super(maxValue, machineNum, HashUtil::sdbmHash); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-cache/src/test/java/cn/hutool/cache/FileCacheTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.cache; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import cn.hutool.cache.file.LFUFileCache; 7 | 8 | /** 9 | * 文件缓存单元测试 10 | * @author looly 11 | * 12 | */ 13 | public class FileCacheTest { 14 | @Test 15 | public void lfuFileCacheTest() { 16 | LFUFileCache cache = new LFUFileCache(1000, 500, 2000); 17 | assertNotNull(cache); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/annotation/AnnotationAttributeValueProvider.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.annotation; 2 | 3 | /** 4 | * 表示一个可以从当前接口的实现类中,获得特定的属性值 5 | */ 6 | @FunctionalInterface 7 | public interface AnnotationAttributeValueProvider { 8 | 9 | /** 10 | * 获取注解属性值 11 | * 12 | * @param attributeName 属性名称 13 | * @param attributeType 属性类型 14 | * @return 注解属性值 15 | */ 16 | Object getAttributeValue(String attributeName, Class attributeType); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/codec/BCDTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.codec; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class BCDTest { 7 | 8 | @Test 9 | public void bcdTest(){ 10 | final String strForTest = "123456ABCDEF"; 11 | 12 | //转BCD 13 | final byte[] bcd = BCD.strToBcd(strForTest); 14 | final String str = BCD.bcdToStr(bcd); 15 | //解码BCD 16 | assertEquals(strForTest, str); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/util/Issue3660Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.util; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import java.util.List; 7 | 8 | public class Issue3660Test { 9 | @Test 10 | public void splitTest() { 11 | List split = StrUtil.split("", ','); 12 | assertEquals(1, split.size()); 13 | 14 | split = StrUtil.splitTrim("", ','); 15 | assertEquals(0, split.size()); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /hutool-json/src/main/java/cn/hutool/json/serialize/JSONDeserializer.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.serialize; 2 | 3 | import cn.hutool.json.JSON; 4 | 5 | /** 6 | * JSON反序列话自定义实现类 7 | * 8 | * @author Looly 9 | * 10 | * @param 反序列化后的类型 11 | */ 12 | @FunctionalInterface 13 | public interface JSONDeserializer { 14 | 15 | /** 16 | * 反序列化,通过实现此方法,自定义实现JSON转换为指定类型的逻辑 17 | * 18 | * @param json {@link JSON} 19 | * @return 目标对象 20 | */ 21 | T deserialize(JSON json); 22 | } 23 | -------------------------------------------------------------------------------- /hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/ELFFilter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.bloomfilter.filter; 2 | 3 | import cn.hutool.core.util.HashUtil; 4 | 5 | public class ELFFilter extends FuncFilter { 6 | private static final long serialVersionUID = 1L; 7 | 8 | public ELFFilter(long maxValue) { 9 | this(maxValue, DEFAULT_MACHINE_NUM); 10 | } 11 | 12 | public ELFFilter(long maxValue, int machineNumber) { 13 | super(maxValue, machineNumber, HashUtil::elfHash); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/TianlFilter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.bloomfilter.filter; 2 | 3 | import cn.hutool.core.util.HashUtil; 4 | 5 | public class TianlFilter extends FuncFilter { 6 | private static final long serialVersionUID = 1L; 7 | 8 | public TianlFilter(long maxValue) { 9 | this(maxValue, DEFAULT_MACHINE_NUM); 10 | } 11 | 12 | public TianlFilter(long maxValue, int machineNum) { 13 | super(maxValue, machineNum, HashUtil::tianlHash); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/clone/CloneSupport.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.clone; 2 | 3 | /** 4 | * 克隆支持类,提供默认的克隆方法 5 | * @author Looly 6 | * 7 | * @param 继承类的类型 8 | */ 9 | public class CloneSupport implements Cloneable{ 10 | 11 | @SuppressWarnings("unchecked") 12 | @Override 13 | public T clone() { 14 | try { 15 | return (T) super.clone(); 16 | } catch (CloneNotSupportedException e) { 17 | throw new CloneRuntimeException(e); 18 | } 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/io/file/FileMode.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.io.file; 2 | 3 | /** 4 | * 文件读写模式,常用于RandomAccessFile 5 | * 6 | * @author looly 7 | * @since 4.5.2 8 | */ 9 | public enum FileMode { 10 | /** 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。 */ 11 | r, 12 | /** 打开以便读取和写入。 */ 13 | rw, 14 | /** 打开以便读取和写入。相对于 "rw","rws" 还要求对“文件的内容”或“元数据”的每个更新都同步写入到基础存储设备。 */ 15 | rws, 16 | /** 打开以便读取和写入,相对于 "rw","rwd" 还要求对“文件的内容”的每个更新都同步写入到基础存储设备。 */ 17 | rwd 18 | 19 | } 20 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/tree/parser/NodeParser.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang.tree.parser; 2 | 3 | import cn.hutool.core.lang.tree.Tree; 4 | 5 | /** 6 | * 树节点解析器 可以参考{@link DefaultNodeParser} 7 | * 8 | * @param 转换的实体 为数据源里的对象类型 9 | * @author liangbaikai 10 | */ 11 | @FunctionalInterface 12 | public interface NodeParser { 13 | /** 14 | * @param object 源数据实体 15 | * @param treeNode 树节点实体 16 | */ 17 | void parse(T object, Tree treeNode); 18 | } 19 | 20 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/date/IssueI97WU6Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.date; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class IssueI97WU6Test { 7 | @Test 8 | public void getTermTest() { 9 | // 润十月没有三十,十月有三十 10 | final ChineseDate chineseDate = new ChineseDate(1984, 10, 30, false); 11 | assertEquals("甲子鼠年 寒月三十", chineseDate.toString()); 12 | assertEquals("小雪", chineseDate.getTerm()); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/Editor.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang; 2 | 3 | /** 4 | * 编辑器接口,常用于对于集合中的元素做统一编辑
5 | * 此编辑器两个作用: 6 | * 7 | *
 8 |  * 1、如果返回值为{@code null},表示此值被抛弃
 9 |  * 2、对对象做修改
10 |  * 
11 | * 12 | * @param 被编辑对象类型 13 | * @author Looly 14 | */ 15 | @FunctionalInterface 16 | public interface Editor { 17 | /** 18 | * 修改过滤后的结果 19 | * 20 | * @param t 被过滤的对象 21 | * @return 修改后的对象,如果被过滤返回{@code null} 22 | */ 23 | T edit(T t); 24 | } 25 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/func/Consumer3.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang.func; 2 | 3 | /** 4 | * 3参数Consumer 5 | * 6 | * @param 参数一类型 7 | * @param 参数二类型 8 | * @param 参数三类型 9 | * @author TomXin 10 | * @since 5.7.22 11 | */ 12 | @FunctionalInterface 13 | public interface Consumer3 { 14 | 15 | /** 16 | * 接收参数方法 17 | * 18 | * @param p1 参数一 19 | * @param p2 参数二 20 | * @param p3 参数三 21 | */ 22 | void accept(P1 p1, P2 p2, P3 p3); 23 | } 24 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/hash/Hash128.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang.hash; 2 | 3 | /** 4 | * Hash计算接口 5 | * 6 | * @param 被计算hash的对象类型 7 | * @author looly 8 | * @since 5.2.5 9 | */ 10 | @FunctionalInterface 11 | public interface Hash128 extends Hash{ 12 | 13 | /** 14 | * 计算Hash值 15 | * 16 | * @param t 对象 17 | * @return hash 18 | */ 19 | Number128 hash128(T t); 20 | 21 | @Override 22 | default Number hash(T t){ 23 | return hash128(t); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /hutool-socket/src/main/java/cn/hutool/socket/nio/ChannelHandler.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.socket.nio; 2 | 3 | import java.nio.channels.SocketChannel; 4 | 5 | /** 6 | * NIO数据处理接口,通过实现此接口,可以从{@link SocketChannel}中读写数据 7 | * 8 | */ 9 | @FunctionalInterface 10 | public interface ChannelHandler { 11 | 12 | /** 13 | * 处理NIO数据 14 | * 15 | * @param socketChannel {@link SocketChannel} 16 | * @throws Exception 可能的处理异常 17 | */ 18 | void handle(SocketChannel socketChannel) throws Exception; 19 | } 20 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/ansi/AnsiElement.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang.ansi; 2 | 3 | /** 4 | * ANSI可转义节点接口,实现为ANSI颜色等 5 | * 6 | *

来自Spring Boot

7 | * 8 | * @author Phillip Webb 9 | */ 10 | public interface AnsiElement { 11 | 12 | /** 13 | * @return ANSI转义编码 14 | */ 15 | @Override 16 | String toString(); 17 | 18 | /** 19 | * 获取ANSI代码,默认返回-1 20 | * @return ANSI代码 21 | * @since 5.8.7 22 | */ 23 | default int getCode(){ 24 | return -1; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/compress/ZipReaderTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.compress; 2 | 3 | import cn.hutool.core.lang.Console; 4 | import cn.hutool.core.util.ZipUtil; 5 | import org.junit.jupiter.api.Disabled; 6 | import org.junit.jupiter.api.Test; 7 | 8 | import java.io.File; 9 | 10 | public class ZipReaderTest { 11 | 12 | @Test 13 | @Disabled 14 | public void unzipTest() { 15 | File unzip = ZipUtil.unzip("d:/java.zip", "d:/test/java"); 16 | Console.log(unzip); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /hutool-db/src/test/java/cn/hutool/db/PageTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.db; 2 | 3 | import cn.hutool.db.sql.Order; 4 | import static org.junit.jupiter.api.Assertions.*; 5 | import org.junit.jupiter.api.Test; 6 | 7 | public class PageTest { 8 | 9 | @Test 10 | public void addOrderTest() { 11 | Page page = new Page(); 12 | page.addOrder(new Order("aaa")); 13 | assertEquals(page.getOrders().length, 1); 14 | page.addOrder(new Order("aaa")); 15 | assertEquals(page.getOrders().length, 2); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /hutool-poi/src/test/java/cn/hutool/poi/excel/WorkbookUtilTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.poi.excel; 2 | 3 | import org.apache.poi.ss.usermodel.Workbook; 4 | import static org.junit.jupiter.api.Assertions.*; 5 | import org.junit.jupiter.api.Test; 6 | 7 | public class WorkbookUtilTest { 8 | 9 | @Test 10 | public void createBookTest(){ 11 | Workbook book = WorkbookUtil.createBook(true); 12 | assertNotNull(book); 13 | 14 | book = WorkbookUtil.createBook(false); 15 | assertNotNull(book); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: java 2 | 3 | sudo: false # faster builds 4 | 5 | install: true 6 | 7 | jdk: 8 | - openjdk8 9 | 10 | notifications: 11 | email: false 12 | 13 | cache: 14 | directories: 15 | - '$HOME/.m2' 16 | 17 | script: 18 | - export TZ=Asia/Shanghai 19 | - mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V 20 | - mvn cobertura:cobertura -Dcobertura.report.format=xml -Dmaven.javadoc.skip.true 21 | 22 | after_success: 23 | - bash <(curl -s https://codecov.io/bash) 24 | 25 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/tokenizer/TokenizerUtil.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.extra.tokenizer; 2 | 3 | import cn.hutool.extra.tokenizer.engine.TokenizerFactory; 4 | 5 | /** 6 | * 分词工具类 7 | * 8 | * @author looly 9 | * @since 4.3.3 10 | */ 11 | public class TokenizerUtil { 12 | 13 | /** 14 | * 根据用户引入的分词引擎jar,自动创建对应的分词引擎对象 15 | * 16 | * @return {@link TokenizerEngine} 17 | */ 18 | public static TokenizerEngine createEngine() { 19 | return TokenizerFactory.create(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /bin/update_version.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #------------------------------------------------ 4 | # 升级Hutool版本,包括: 5 | # 1. 升级pom.xml中的版本号 6 | # 2. 替换README.md和docs中的版本号 7 | #------------------------------------------------ 8 | 9 | if [ ! -n "$1" ]; then 10 | echo "ERROR: 新版本不存在,请指定参数1" 11 | exit 12 | fi 13 | 14 | # 替换所有模块pom.xml中的版本 15 | mvn versions:set -DnewVersion=$1 16 | 17 | # 不带-SNAPSHOT的版本号,用于替换其它地方 18 | version=${1%-SNAPSHOT} 19 | 20 | # 替换其它地方的版本 21 | $(pwd)/bin/replaceVersion.sh "$version" 22 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/intern/Interner.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang.intern; 2 | 3 | /** 4 | * 规范化表示形式封装
5 | * 所谓规范化,即当两个对象equals时,规范化的对象则可以实现==
6 | * 此包中的相关封装类似于 {@link String#intern()} 7 | * 8 | * @param 规范化的对象类型 9 | * @author looly 10 | * @since 5.4.3 11 | */ 12 | public interface Interner { 13 | 14 | /** 15 | * 返回指定对象对应的规范化对象,sample对象可能有多个,但是这些对象如果都equals,则返回的是同一个对象 16 | * 17 | * @param sample 对象 18 | * @return 样例对象 19 | */ 20 | T intern(T sample); 21 | } -------------------------------------------------------------------------------- /hutool-crypto/src/test/java/cn/hutool/crypto/symmetric/PBKDF2Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.crypto.symmetric; 2 | 3 | import cn.hutool.core.util.RandomUtil; 4 | import cn.hutool.crypto.SecureUtil; 5 | import static org.junit.jupiter.api.Assertions.*; 6 | import org.junit.jupiter.api.Test; 7 | 8 | public class PBKDF2Test { 9 | 10 | @Test 11 | public void encryptTest(){ 12 | final String s = SecureUtil.pbkdf2("123456".toCharArray(), RandomUtil.randomBytes(16)); 13 | assertEquals(128, s.length()); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/excel/cell/CellHandler.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.poi.excel.cell; 2 | 3 | import org.apache.poi.ss.usermodel.Cell; 4 | 5 | /** 6 | * 单元格处理器接口
7 | * 用于在读取Excel单元格值时自定义结果值的获取,如在获取值的同时,获取单元格样式、坐标等信息,或根据单元格信息,装饰转换结果值 8 | * 9 | * @author Looly 10 | */ 11 | @FunctionalInterface 12 | public interface CellHandler { 13 | 14 | /** 15 | * 处理 16 | * 17 | * @param cell 单元格对象,可以获取单元格行、列样式等信息 18 | * @param value 单元格值 19 | */ 20 | void handle(Cell cell, Object value); 21 | } 22 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/text/csv/IssueIB5UQ8Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.text.csv; 2 | 3 | import cn.hutool.core.lang.Console; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import java.io.StringReader; 7 | 8 | public class IssueIB5UQ8Test { 9 | @Test 10 | void parseEscapeTest() { 11 | String csv = "\"Consultancy, 10\"\",, food\""; 12 | final CsvReader reader = CsvUtil.getReader(new StringReader(csv)); 13 | final String s = reader.read().getRow(0).get(0); 14 | Console.log(s); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /hutool-db/src/test/java/cn/hutool/db/dialect/DriverUtilTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.db.dialect; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class DriverUtilTest { 7 | 8 | @Test 9 | public void identifyDriverTest(){ 10 | String url = "jdbc:h2:file:./db/test;AUTO_SERVER=TRUE;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL"; 11 | String driver = DriverUtil.identifyDriver(url); // driver 返回 mysql 的 driver 12 | assertEquals("org.h2.Driver", driver); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/map/IssueI88R5MTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.map; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import java.util.LinkedHashMap; 7 | 8 | public class IssueI88R5MTest { 9 | @Test 10 | public void biMapTest() { 11 | final BiMap biMap = new BiMap<>(new LinkedHashMap<>()); 12 | biMap.put("aaa", 111); 13 | biMap.getKey(111); 14 | biMap.put("aaa", 222); 15 | assertNull(biMap.getKey(111)); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /hutool-db/src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ${format} 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /hutool-extra/src/main/resources/META-INF/services/cn.hutool.extra.template.TemplateEngine: -------------------------------------------------------------------------------- 1 | cn.hutool.extra.template.engine.beetl.BeetlEngine 2 | cn.hutool.extra.template.engine.freemarker.FreemarkerEngine 3 | cn.hutool.extra.template.engine.velocity.VelocityEngine 4 | cn.hutool.extra.template.engine.rythm.RythmEngine 5 | cn.hutool.extra.template.engine.enjoy.EnjoyEngine 6 | cn.hutool.extra.template.engine.thymeleaf.ThymeleafEngine 7 | cn.hutool.extra.template.engine.wit.WitEngine 8 | cn.hutool.extra.template.engine.jetbrick.JetbrickEngine 9 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/Issue3649Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json; 2 | 3 | import lombok.Data; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import static org.junit.jupiter.api.Assertions.assertEquals; 7 | 8 | public class Issue3649Test { 9 | @Test 10 | public void toEmptyBeanTest() { 11 | final Object bean = JSONUtil.toBean("{}", JSONConfig.create().setIgnoreError(true), EmptyBean.class); 12 | assertEquals(new EmptyBean(), bean); 13 | } 14 | 15 | @Data 16 | public static class EmptyBean {} 17 | } 18 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/test/bean/ExamInfoDict.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.test.bean; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 9 | * @author 质量过关 10 | * 11 | */ 12 | @Data 13 | public class ExamInfoDict implements Serializable { 14 | private static final long serialVersionUID = 3640936499125004525L; 15 | 16 | // 主键 17 | private Integer id; // 可当作题号 18 | // 试题类型 客观题 0主观题 1 19 | private Integer examType; 20 | // 试题是否作答 21 | private Integer answerIs; 22 | } 23 | -------------------------------------------------------------------------------- /hutool-log/src/test/java/cn/hutool/log/test/LogTubeTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.log.test; 2 | 3 | import cn.hutool.log.Log; 4 | import cn.hutool.log.LogFactory; 5 | import cn.hutool.log.dialect.logtube.LogTubeLogFactory; 6 | import org.junit.jupiter.api.Test; 7 | 8 | public class LogTubeTest { 9 | 10 | @Test 11 | public void logTest(){ 12 | LogFactory factory = new LogTubeLogFactory(); 13 | LogFactory.setCurrentLogFactory(factory); 14 | Log log = LogFactory.get(); 15 | log.debug("LogTube debug test."); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /hutool-log/src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ${format} 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/date/chinese/IssueI5YB1ATest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.date.chinese; 2 | 3 | import cn.hutool.core.date.ChineseDate; 4 | import static org.junit.jupiter.api.Assertions.*; 5 | import org.junit.jupiter.api.Test; 6 | 7 | public class IssueI5YB1ATest { 8 | @Test 9 | public void chineseDateTest() { 10 | // 四月非闰月,因此isLeapMonth参数无效 11 | final ChineseDate date = new ChineseDate(2023, 4, 8, true); 12 | assertEquals("2023-05-26 00:00:00", date.getGregorianDate().toString()); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /hutool-cron/src/main/java/cn/hutool/cron/task/Task.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.cron.task; 2 | 3 | /** 4 | * 定时作业接口,通过实现execute方法执行具体的任务 5 | *

6 | * 作业执行是异步执行,即不同作业、相同作业在不同时间的执行是相互独立的。
7 | * 假如前一个作业未完成,下一个调度开始,则不会等待前一个作业,直接执行。
8 | * 关于作业的互斥,请自行加锁完成。 9 | *

10 | * 11 | * @author Looly 12 | */ 13 | @FunctionalInterface 14 | public interface Task { 15 | 16 | /** 17 | * 执行作业 18 | *

19 | * 作业的具体实现需考虑异常情况,默认情况下任务异常在监听中统一监听处理,如果不加入监听,异常会被忽略
20 | * 因此最好自行捕获异常后处理 21 | */ 22 | void execute(); 23 | } 24 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/pinyin/engine/jpinyin/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 封装了Jpinyin的引擎。 3 | * 4 | *

5 | * jpinyin(github库作者已删除)封装。 6 | *

7 | * 8 | *

9 | * 引入: 10 | *

11 |  * <dependency>
12 |  *     <groupId>com.github.stuxuhai</groupId>
13 |  *     <artifactId>jpinyin</artifactId>
14 |  *     <version>1.1.8</version>
15 |  * </dependency>
16 |  * 
17 | * 18 | * @author looly 19 | */ 20 | package cn.hutool.extra.pinyin.engine.jpinyin; -------------------------------------------------------------------------------- /hutool-http/src/test/java/cn/hutool/http/server/BlankServerTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.http.server; 2 | 3 | import cn.hutool.core.swing.DesktopUtil; 4 | import cn.hutool.http.ContentType; 5 | import cn.hutool.http.HttpUtil; 6 | 7 | public class BlankServerTest { 8 | public static void main(String[] args) { 9 | HttpUtil.createServer(8888) 10 | .addAction("/", (req, res)-> res.write("Hello Hutool Server", ContentType.JSON.getValue())) 11 | .start(); 12 | 13 | DesktopUtil.browse("http://localhost:8888/"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/util/IssueI9IDAGTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.util; 2 | 3 | import cn.hutool.core.io.FileUtil; 4 | import cn.hutool.core.lang.Console; 5 | import org.junit.jupiter.api.Disabled; 6 | import org.junit.jupiter.api.Test; 7 | 8 | import java.io.File; 9 | import java.util.List; 10 | 11 | public class IssueI9IDAGTest { 12 | @Test 13 | @Disabled 14 | public void loopFilesTest() { 15 | final List files = FileUtil.loopFiles("d:/m2_repo"); 16 | files.forEach(Console::log); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/util/IssueI9UK5VTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.util; 2 | 3 | import org.junit.jupiter.api.Test; 4 | 5 | import java.util.List; 6 | 7 | import static org.junit.jupiter.api.Assertions.assertEquals; 8 | 9 | public class IssueI9UK5VTest { 10 | @Test 11 | public void splitTest() { 12 | String str = ""; 13 | List split = StrUtil.split(str, ','); 14 | assertEquals(1, split.size()); 15 | 16 | split = StrUtil.splitTrim(str, ','); 17 | assertEquals(0, split.size()); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /hutool-poi/src/test/java/cn/hutool/poi/excel/CellUtilTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.poi.excel; 2 | 3 | import org.apache.poi.ss.usermodel.BuiltinFormats; 4 | import org.junit.jupiter.api.Disabled; 5 | import org.junit.jupiter.api.Test; 6 | 7 | import cn.hutool.core.lang.Console; 8 | 9 | public class CellUtilTest { 10 | 11 | @Test 12 | @Disabled 13 | public void isDateTest() { 14 | String[] all = BuiltinFormats.getAll(); 15 | for(int i = 0 ; i < all.length; i++) { 16 | Console.log("{} {}", i, all[i]); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/bean/copier/IJSONTypeConverter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.bean.copier; 2 | 3 | import java.lang.reflect.Type; 4 | 5 | /** 6 | * JSON自定义转换扩展接口,因core模块无法直接调用json模块而创建, 7 | * 使用此接口避免使用反射调用toBean方法而性能太差。 8 | * 9 | * @author mkeq 10 | * @since 5.8.22 11 | */ 12 | public interface IJSONTypeConverter { 13 | 14 | /** 15 | * 转为实体类对象 16 | * 17 | * @param Bean类型 18 | * @param type {@link Type} 19 | * @return 实体类对象 20 | * @since 3.0.8 21 | */ 22 | T toBean(Type type); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/thread/lock/NoReadWriteLock.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.thread.lock; 2 | 3 | import java.util.concurrent.locks.Lock; 4 | import java.util.concurrent.locks.ReadWriteLock; 5 | 6 | /** 7 | * 无锁的读写锁实现 8 | * 9 | * @author looly 10 | * @since 5.8.0 11 | */ 12 | public class NoReadWriteLock implements ReadWriteLock { 13 | @Override 14 | public Lock readLock() { 15 | return NoLock.INSTANCE; 16 | } 17 | 18 | @Override 19 | public Lock writeLock() { 20 | return NoLock.INSTANCE; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/codec/RotTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.codec; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class RotTest { 7 | 8 | @Test 9 | public void rot13Test() { 10 | String str = "1f2e9df6131b480b9fdddc633cf24996"; 11 | 12 | String encode13 = Rot.encode13(str); 13 | assertEquals("4s5r2qs9464o713o2sqqqp966ps57229", encode13); 14 | 15 | String decode13 = Rot.decode13(encode13); 16 | assertEquals(str, decode13); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/img/Issue2735Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.img; 2 | 3 | import cn.hutool.core.io.FileUtil; 4 | import org.junit.jupiter.api.Disabled; 5 | import org.junit.jupiter.api.Test; 6 | 7 | import java.awt.Image; 8 | 9 | public class Issue2735Test { 10 | 11 | @Test 12 | @Disabled 13 | public void scaleTest() { 14 | final Img img = Img.from(FileUtil.file("d:/test/hutool.png")) 15 | .scale(200, 200, Image.SCALE_DEFAULT); 16 | 17 | img.write(FileUtil.file("d:/test/dest3.png")); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/Issue2953Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class Issue2953Test { 7 | @Test 8 | public void parseObjWithBigNumberTest() { 9 | final String a = "{\"a\": 114793903847679990000000000000000000000}"; 10 | final JSONObject jsonObject = JSONUtil.parseObj(a, JSONConfig.create()); 11 | assertEquals("{\"a\":\"114793903847679990000000000000000000000\"}", jsonObject.toString()); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /hutool-poi/src/test/java/cn/hutool/poi/excel/IssueIB0EJ9Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.poi.excel; 2 | 3 | import cn.hutool.core.io.FileUtil; 4 | import cn.hutool.core.lang.Console; 5 | import org.junit.jupiter.api.Disabled; 6 | import org.junit.jupiter.api.Test; 7 | 8 | public class IssueIB0EJ9Test { 9 | @Test 10 | @Disabled 11 | void saxReadTest() { 12 | ExcelUtil.readBySax(FileUtil.file("d:/test/数值型测试.xlsx"), "hcm工资表", 13 | (sheetIndex, rowIndex, rowlist) -> Console.log("[{}] [{}] {}", sheetIndex, rowIndex, rowlist)); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/codec/CaesarTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.codec; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class CaesarTest { 7 | 8 | @Test 9 | public void caesarTest() { 10 | String str = "1f2e9df6131b480b9fdddc633cf24996"; 11 | 12 | String encode = Caesar.encode(str, 3); 13 | assertEquals("1H2G9FH6131D480D9HFFFE633EH24996", encode); 14 | 15 | String decode = Caesar.decode(encode, 3); 16 | assertEquals(str, decode); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/io/FileReaderTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.io; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import cn.hutool.core.io.file.FileReader; 7 | 8 | /** 9 | * 文件读取测试 10 | * @author Looly 11 | * 12 | */ 13 | public class FileReaderTest { 14 | 15 | @Test 16 | public void fileReaderTest(){ 17 | FileReader fileReader = new FileReader("test.properties"); 18 | String result = fileReader.readString(); 19 | assertNotNull(result); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/lang/TupleTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import java.util.Locale; 7 | import java.util.TimeZone; 8 | 9 | public class TupleTest { 10 | 11 | @Test 12 | public void hashCodeTest(){ 13 | final Tuple tuple = new Tuple(Locale.getDefault(), TimeZone.getDefault()); 14 | final Tuple tuple2 = new Tuple(Locale.getDefault(), TimeZone.getDefault()); 15 | assertEquals(tuple, tuple2); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/date/Issue3348Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.date; 2 | 3 | import cn.hutool.core.lang.Console; 4 | import static org.junit.jupiter.api.Assertions.*; 5 | import org.junit.jupiter.api.Test; 6 | 7 | public class Issue3348Test { 8 | 9 | @Test 10 | public void formatChineseDateTest() { 11 | final String formatChineseDate = DateUtil.formatChineseDate( 12 | DateUtil.parse("2023-10-23"), true, false); 13 | Console.log(formatChineseDate); 14 | assertEquals("二〇二三年十月二十三日", formatChineseDate); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/lang/tree/TreeBuilderTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.lang.tree; 2 | 3 | import org.junit.jupiter.api.Test; 4 | 5 | import java.util.ArrayList; 6 | 7 | import static org.junit.jupiter.api.Assertions.assertThrows; 8 | 9 | public class TreeBuilderTest { 10 | 11 | @Test 12 | public void checkIsBuiltTest(){ 13 | assertThrows(IllegalArgumentException.class, () -> { 14 | final TreeBuilder of = TreeBuilder.of(0); 15 | of.build(); 16 | of.append(new ArrayList<>()); 17 | }); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/IssueI84V6ITest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class IssueI84V6ITest { 7 | @Test 8 | public void formatTest() { 9 | final String a1 = "{'x':'\\n','y':','}"; 10 | final String formatJsonStr = JSONUtil.formatJsonStr(a1); 11 | // Console.log(formatJsonStr); 12 | assertEquals( 13 | "{\n" + 14 | " 'x': '\\n',\n" + 15 | " 'y': ','\n" + 16 | "}", formatJsonStr); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/convert/impl/OptConverter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.convert.impl; 2 | 3 | import cn.hutool.core.convert.AbstractConverter; 4 | import cn.hutool.core.lang.Opt; 5 | 6 | /** 7 | * 8 | * {@link Opt}对象转换器 9 | * 10 | * @author Looly 11 | * @since 5.7.16 12 | */ 13 | public class OptConverter extends AbstractConverter> { 14 | private static final long serialVersionUID = 1L; 15 | 16 | @Override 17 | protected Opt convertInternal(Object value) { 18 | return Opt.ofNullable(value); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/convert/impl/TimeZoneConverter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.convert.impl; 2 | 3 | import java.util.TimeZone; 4 | 5 | import cn.hutool.core.convert.AbstractConverter; 6 | 7 | /** 8 | * TimeZone转换器 9 | * @author Looly 10 | * 11 | */ 12 | public class TimeZoneConverter extends AbstractConverter{ 13 | private static final long serialVersionUID = 1L; 14 | 15 | @Override 16 | protected TimeZone convertInternal(Object value) { 17 | return TimeZone.getTimeZone(convertToStr(value)); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/lang/ref/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 引用工具封装,主要针对{@link java.lang.ref.Reference} 工具化封装
3 | * 主要封装包括: 4 | *
 5 |  * 1. {@link java.lang.ref.SoftReference} 软引用,在GC报告内存不足时会被GC回收
 6 |  * 2. {@link java.lang.ref.WeakReference} 弱引用,在GC时发现弱引用会回收其对象
 7 |  * 3. {@link java.lang.ref.PhantomReference} 虚引用,在GC时发现虚引用对象,会将{@link java.lang.ref.PhantomReference}插入{@link java.lang.ref.ReferenceQueue}。 此时对象未被真正回收,要等到{@link java.lang.ref.ReferenceQueue}被真正处理后才会被回收。
 8 |  * 
9 | */ 10 | package cn.hutool.core.lang.ref; 11 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/convert/Issue2611Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.convert; 2 | 3 | import cn.hutool.core.util.NumberUtil; 4 | import static org.junit.jupiter.api.Assertions.*; 5 | import org.junit.jupiter.api.Test; 6 | 7 | import java.math.BigDecimal; 8 | 9 | public class Issue2611Test { 10 | 11 | @Test 12 | public void chineseMoneyToNumberTest(){ 13 | final BigDecimal value = Convert.chineseMoneyToNumber("陆万柒仟伍佰伍拾柒元"); 14 | 15 | assertEquals("67,557.00", NumberUtil.decimalFormatMoney(value.doubleValue())); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/pinyin/engine/pinyin4j/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 封装了Pinyin4j的引擎。 3 | * 4 | *

5 | * pinyin4j(http://sourceforge.net/projects/pinyin4j)封装。 6 | *

7 | * 8 | *

9 | * 引入: 10 | *

11 |  * <dependency>
12 |  *     <groupId>com.belerweb</groupId>
13 |  *     <artifactId>pinyin4j</artifactId>
14 |  *     <version>2.5.1</version>
15 |  * </dependency>
16 |  * 
17 | * 18 | * @author looly 19 | */ 20 | package cn.hutool.extra.pinyin.engine.pinyin4j; -------------------------------------------------------------------------------- /hutool-http/src/test/java/cn/hutool/http/server/ExceptionServerTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.http.server; 2 | 3 | import cn.hutool.http.HttpUtil; 4 | import cn.hutool.http.server.filter.DefaultExceptionFilter; 5 | 6 | import java.io.IOException; 7 | 8 | public class ExceptionServerTest { 9 | public static void main(final String[] args) { 10 | HttpUtil.createServer(8888) 11 | .addFilter(new DefaultExceptionFilter()) 12 | .addAction("/", (req, res) -> { 13 | throw new RuntimeException("Test Exception"); 14 | }) 15 | .start(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /hutool-setting/src/test/resources/test.setting: -------------------------------------------------------------------------------- 1 | # ------------------------------------------------------------- 2 | # ----- Setting File with UTF8----- 3 | # ----- 数据库配置文件 ----- 4 | # ------------------------------------------------------------- 5 | 6 | #中括表示一个分组,其下面的所有属性归属于这个分组,在此分组名为demo,也可以没有分组 7 | [demo] 8 | #数据库驱动名,如果不指定,则会根据url自动判定 9 | driver = com.mysql.jdbc.Driver 10 | #JDBC url,必须 11 | url = jdbc:mysql://fedora.vmware:3306/extractor 12 | #用户名,必须 13 | user = root${driver} 14 | user2 = root${demo.driver} 15 | #密码,必须,如果密码为空,请填写 pass = 16 | pass = 123456 -------------------------------------------------------------------------------- /hutool-socket/src/main/java/cn/hutool/socket/protocol/MsgEncoder.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.socket.protocol; 2 | 3 | import java.nio.ByteBuffer; 4 | 5 | import cn.hutool.socket.aio.AioSession; 6 | 7 | /** 8 | * 消息编码器 9 | * 10 | * @author looly 11 | * 12 | * @param 编码前后的数据类型 13 | */ 14 | public interface MsgEncoder { 15 | /** 16 | * 编码数据用于写出 17 | * 18 | * @param session 本次需要解码的session 19 | * @param writeBuffer 待处理的读buffer 20 | * @param data 写出的数据 21 | */ 22 | void encode(AioSession session, ByteBuffer writeBuffer, T data); 23 | } 24 | -------------------------------------------------------------------------------- /hutool-socket/src/main/java/cn/hutool/socket/protocol/Protocol.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017, org.smartboot. All rights reserved. 3 | * project name: smart-socket 4 | * file name: Protocol.java 5 | * Date: 2017-11-25 6 | * Author: sandao 7 | */ 8 | 9 | package cn.hutool.socket.protocol; 10 | 11 | /** 12 | * 协议接口
13 | * 通过实现此接口完成消息的编码和解码 14 | * 15 | *

16 | * 所有Socket使用相同协议对象,类成员变量和对象成员变量易造成并发读写问题。 17 | *

18 | * 19 | * @author Looly 20 | */ 21 | public interface Protocol extends MsgEncoder, MsgDecoder { 22 | 23 | } 24 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/convert/impl/UUIDConverter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.convert.impl; 2 | 3 | import java.util.UUID; 4 | 5 | import cn.hutool.core.convert.AbstractConverter; 6 | 7 | /** 8 | * UUID对象转换器转换器 9 | * 10 | * @author Looly 11 | * @since 4.0.10 12 | * 13 | */ 14 | public class UUIDConverter extends AbstractConverter { 15 | private static final long serialVersionUID = 1L; 16 | 17 | @Override 18 | protected UUID convertInternal(Object value) { 19 | return UUID.fromString(convertToStr(value)); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/pinyin/engine/houbbpinyin/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 封装了 Pinyin 的引擎。 3 | * 4 | *

5 | * pinyin(https://github.com/houbb/pinyin)封装。 6 | *

7 | * 8 | *

9 | * 引入: 10 | *

11 |  * <dependency>
12 |  *     <groupId>com.github.houbb</groupId>
13 |  *     <artifactId>pinyin</artifactId>
14 |  *     <version>0.2.0</version>
15 |  * </dependency>
16 |  * 
17 | * 18 | * @author looly 19 | */ 20 | package cn.hutool.extra.pinyin.engine.houbbpinyin; 21 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/template/TemplateEngine.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.extra.template; 2 | 3 | /** 4 | * 引擎接口,通过实现此接口从而使用对应的模板引擎 5 | * 6 | * @author looly 7 | */ 8 | public interface TemplateEngine { 9 | 10 | /** 11 | * 使用指定配置文件初始化模板引擎 12 | * 13 | * @param config 配置文件 14 | * @return this 15 | */ 16 | TemplateEngine init(TemplateConfig config); 17 | 18 | /** 19 | * 获取模板 20 | * 21 | * @param resource 资源,根据实现不同,此资源可以是模板本身,也可以是模板的相对路径 22 | * @return 模板实现 23 | */ 24 | Template getTemplate(String resource); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /hutool-socket/src/main/java/cn/hutool/socket/aio/SimpleIoAction.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.socket.aio; 2 | 3 | import java.nio.ByteBuffer; 4 | 5 | import cn.hutool.log.StaticLog; 6 | 7 | /** 8 | * 简易IO信息处理类
9 | * 简单实现了accept和failed事件 10 | * 11 | * @author looly 12 | * 13 | */ 14 | public abstract class SimpleIoAction implements IoAction { 15 | 16 | @Override 17 | public void accept(AioSession session) { 18 | } 19 | 20 | @Override 21 | public void failed(Throwable exc, AioSession session) { 22 | StaticLog.error(exc); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /hutool-cron/src/main/java/cn/hutool/cron/pattern/matcher/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 定时任务表达式匹配器,内部使用
3 | * 单一表达式使用{@link cn.hutool.cron.pattern.matcher.PatternMatcher}表示
4 | * {@link cn.hutool.cron.pattern.matcher.PatternMatcher}由7个{@link cn.hutool.cron.pattern.matcher.PartMatcher}组成, 5 | * 分别表示定时任务表达式中的7个位置: 6 | *
 7 |  *         0      1     2        3         4       5        6
 8 |  *      SECOND MINUTE HOUR DAY_OF_MONTH MONTH DAY_OF_WEEK YEAR
 9 |  * 
10 | * 11 | * @author looly 12 | * 13 | */ 14 | package cn.hutool.cron.pattern.matcher; 15 | -------------------------------------------------------------------------------- /hutool-cron/src/test/java/cn/hutool/cron/demo/TestJob2.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.cron.demo; 2 | 3 | import java.util.concurrent.TimeUnit; 4 | 5 | import cn.hutool.core.lang.Console; 6 | import cn.hutool.core.thread.ThreadUtil; 7 | 8 | /** 9 | * 测试定时任务,当触发到定时的时间点时,执行doTest方法 10 | * 11 | * @author looly 12 | * 13 | */ 14 | public class TestJob2 { 15 | 16 | /** 17 | * 执行定时任务内容 18 | */ 19 | public void doTest() { 20 | Console.log("TestJob2.doTest开始执行……"); 21 | ThreadUtil.sleep(20, TimeUnit.SECONDS); 22 | Console.log("延迟20s打印testJob2"); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/tokenizer/Word.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.extra.tokenizer; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * 表示分词中的一个词 7 | * 8 | * @author looly 9 | * 10 | */ 11 | public interface Word extends Serializable { 12 | 13 | /** 14 | * 获取单词文本 15 | * 16 | * @return 单词文本 17 | */ 18 | String getText(); 19 | 20 | /** 21 | * 获取本词的起始位置 22 | * 23 | * @return 起始位置 24 | */ 25 | int getStartOffset(); 26 | 27 | /** 28 | * 获取本词的结束位置 29 | * 30 | * @return 结束位置 31 | */ 32 | int getEndOffset(); 33 | } 34 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/IssueI6H0XFTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json; 2 | 3 | import lombok.Data; 4 | import static org.junit.jupiter.api.Assertions.*; 5 | import org.junit.jupiter.api.Test; 6 | 7 | public class IssueI6H0XFTest { 8 | @Test 9 | public void toBeanTest(){ 10 | final Demo demo = JSONUtil.toBean("{\"biz\":\"A\",\"isBiz\":true}", Demo.class); 11 | assertEquals("A", demo.getBiz()); 12 | assertEquals("{\"biz\":\"A\"}", JSONUtil.toJsonStr(demo)); 13 | } 14 | 15 | @Data 16 | static class Demo { 17 | String biz; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/analysis/SmartcnEngine.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.extra.tokenizer.engine.analysis; 2 | 3 | import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer; 4 | 5 | /** 6 | * Lucene-smartcn分词引擎实现
7 | * 项目地址:https://github.com/apache/lucene-solr/tree/master/lucene/analysis/smartcn 8 | * 9 | * @author looly 10 | * 11 | */ 12 | public class SmartcnEngine extends AnalysisEngine { 13 | 14 | /** 15 | * 构造 16 | */ 17 | public SmartcnEngine() { 18 | super(new SmartChineseAnalyzer()); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /hutool-extra/src/main/resources/META-INF/services/cn.hutool.extra.tokenizer.TokenizerEngine: -------------------------------------------------------------------------------- 1 | cn.hutool.extra.tokenizer.engine.ansj.AnsjEngine 2 | cn.hutool.extra.tokenizer.engine.hanlp.HanLPEngine 3 | cn.hutool.extra.tokenizer.engine.ikanalyzer.IKAnalyzerEngine 4 | cn.hutool.extra.tokenizer.engine.jcseg.JcsegEngine 5 | cn.hutool.extra.tokenizer.engine.jieba.JiebaEngine 6 | cn.hutool.extra.tokenizer.engine.mmseg.MmsegEngine 7 | cn.hutool.extra.tokenizer.engine.word.WordEngine 8 | cn.hutool.extra.tokenizer.engine.analysis.SmartcnEngine 9 | cn.hutool.extra.tokenizer.engine.mynlp.MynlpEngine -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/util/ClassLoaderUtilTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.util; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class ClassLoaderUtilTest { 7 | 8 | @Test 9 | public void loadClassTest() { 10 | String name = ClassLoaderUtil.loadClass("java.lang.Thread.State").getName(); 11 | assertEquals("java.lang.Thread$State", name); 12 | 13 | name = ClassLoaderUtil.loadClass("java.lang.Thread$State").getName(); 14 | assertEquals("java.lang.Thread$State", name); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /hutool-crypto/src/test/resources/test_ec_certificate_request.csr: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE REQUEST----- 2 | MIIBODCB3wIBADBWMQswCQYDVQQGEwJDTjEQMA4GA1UECBMHQmVpamluZzEQMA4G 3 | A1UEBxMHQmVpamluZzEPMA0GA1UECxMGSHV0b29sMRIwEAYDVQQDEwlodXRvb2wu 4 | Y24wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASXXjbO+6vY7vdD5aXoi2EMHUq0 5 | itI8kG6FN3cgLBFFoelyy3JxX94h7RpH4ylpNUXeRNuzv1VcPa06nsN1OjTWoCcw 6 | JQYJKoZIhvcNAQkOMRgwFjAUBgNVHREEDTALgglodXRvb2wuY24wCgYIKoZIzj0E 7 | AwIDSAAwRQIhAIH0w1XbGnRfbM1flsqRHzfur+pEZ3wiqpChxAI39lpIAiAsNAwn 8 | o7PsXpTXLhq1ZgqurIjFeFuvY1hszUODmO5ySQ== 9 | -----END CERTIFICATE REQUEST----- -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/pinyin/engine/bopomofo4j/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 封装了Bopomofo4j的引擎。 3 | * 4 | *

5 | * Bopomofo4j封装,项目:https://gitee.com/rnkrsoft/Bopomofo4j。 6 | *

7 | * 8 | *

9 | * 引入: 10 | *

11 |  * <dependency>
12 |  *     <groupId>com.rnkrsoft.bopomofo4j</groupId>
13 |  *     <artifactId>bopomofo4j</artifactId>
14 |  *     <version>1.0.0</version>
15 |  * </dependency>
16 |  * 
17 | * 18 | * @author looly 19 | */ 20 | package cn.hutool.extra.pinyin.engine.bopomofo4j; -------------------------------------------------------------------------------- /hutool-setting/src/test/resources/to_bean_test.properties: -------------------------------------------------------------------------------- 1 | #Simple properties 2 | mail.host=mailer@mail.com 3 | mail.port=9000 4 | mail.from=mailer@mail.com 5 | 6 | #List properties 7 | mail.defaultRecipients[0]=admin@mail.com 8 | mail.defaultRecipients[1]=owner@mail.com 9 | 10 | #Map Properties 11 | mail.additionalHeaders.redelivery=true 12 | mail.additionalHeaders.secure=true 13 | 14 | #Object properties 15 | mail.credentials.username=john 16 | mail.credentials.password=password 17 | mail.credentials.authMethod=SHA1 18 | 19 | # ignore properties 20 | mail.ignore.filed = balabala -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/io/resource/WebAppResource.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.io.resource; 2 | 3 | import java.io.File; 4 | 5 | import cn.hutool.core.io.FileUtil; 6 | 7 | /** 8 | * Web root资源访问对象 9 | * 10 | * @author looly 11 | * @since 4.1.11 12 | */ 13 | public class WebAppResource extends FileResource { 14 | private static final long serialVersionUID = 1L; 15 | 16 | /** 17 | * 构造 18 | * 19 | * @param path 相对于Web root的路径 20 | */ 21 | public WebAppResource(String path) { 22 | super(new File(FileUtil.getWebRoot(), path)); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /hutool-dfa/src/main/java/cn/hutool/dfa/SensitiveProcessor.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.dfa; 2 | 3 | /** 4 | * @author 肖海斌 5 | * 敏感词过滤处理器,默认按字符数替换成* 6 | */ 7 | public interface SensitiveProcessor { 8 | 9 | /** 10 | * 敏感词过滤处理 11 | * @param foundWord 敏感词匹配到的内容 12 | * @return 敏感词过滤后的内容,默认按字符数替换成* 13 | */ 14 | default String process(FoundWord foundWord) { 15 | int length = foundWord.getFoundWord().length(); 16 | StringBuilder sb = new StringBuilder(length); 17 | for (int i = 0; i < length; i++) { 18 | sb.append("*"); 19 | } 20 | return sb.toString(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/excel/editors/NumericToIntEditor.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.poi.excel.editors; 2 | 3 | import org.apache.poi.ss.usermodel.Cell; 4 | 5 | import cn.hutool.poi.excel.cell.CellEditor; 6 | 7 | /** 8 | * POI中NUMRIC类型的值默认返回的是Double类型,此编辑器用于转换其为int型 9 | * 10 | * @author Looly 11 | */ 12 | public class NumericToIntEditor implements CellEditor { 13 | 14 | @Override 15 | public Object edit(Cell cell, Object value) { 16 | if (value instanceof Number) { 17 | return ((Number) value).intValue(); 18 | } 19 | return value; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/excel/editors/TrimEditor.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.poi.excel.editors; 2 | 3 | import org.apache.poi.ss.usermodel.Cell; 4 | 5 | import cn.hutool.core.util.StrUtil; 6 | import cn.hutool.poi.excel.cell.CellEditor; 7 | 8 | /** 9 | * 去除String类型的单元格值两边的空格 10 | * @author Looly 11 | * 12 | */ 13 | public class TrimEditor implements CellEditor{ 14 | 15 | @Override 16 | public Object edit(Cell cell, Object value) { 17 | if(value instanceof String) { 18 | return StrUtil.trim((String)value); 19 | } 20 | return value; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/convert/impl/OptionalConverter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.convert.impl; 2 | 3 | import cn.hutool.core.convert.AbstractConverter; 4 | 5 | import java.util.Optional; 6 | 7 | /** 8 | * 9 | * {@link Optional}对象转换器 10 | * 11 | * @author Looly 12 | * @since 5.0.0 13 | */ 14 | public class OptionalConverter extends AbstractConverter> { 15 | private static final long serialVersionUID = 1L; 16 | 17 | @Override 18 | protected Optional convertInternal(Object value) { 19 | return Optional.ofNullable(value); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/annotation/scanner/AnnotationForScannerTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.annotation.scanner; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * @author huangchengxing 10 | */ 11 | @Retention(RetentionPolicy.RUNTIME) 12 | @Target({ ElementType.ANNOTATION_TYPE, ElementType.TYPE, ElementType.METHOD, ElementType.FIELD }) 13 | @interface AnnotationForScannerTest { 14 | String value() default ""; 15 | } 16 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/net/FormUrlencodedTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.net; 2 | 3 | import cn.hutool.core.util.CharsetUtil; 4 | import static org.junit.jupiter.api.Assertions.*; 5 | import org.junit.jupiter.api.Test; 6 | 7 | public class FormUrlencodedTest { 8 | 9 | @Test 10 | public void encodeParamTest(){ 11 | String encode = FormUrlencoded.ALL.encode("a+b", CharsetUtil.CHARSET_UTF_8); 12 | assertEquals("a%2Bb", encode); 13 | 14 | encode = FormUrlencoded.ALL.encode("a b", CharsetUtil.CHARSET_UTF_8); 15 | assertEquals("a+b", encode); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /hutool-cron/src/main/java/cn/hutool/cron/listener/SimpleTaskListener.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.cron.listener; 2 | 3 | import cn.hutool.cron.TaskExecutor; 4 | 5 | /** 6 | * 简单监听实现,不做任何操作
7 | * 继承此监听后实现需要的方法即可 8 | * @author Looly 9 | * 10 | */ 11 | public class SimpleTaskListener implements TaskListener{ 12 | 13 | @Override 14 | public void onStart(TaskExecutor executor) { 15 | } 16 | 17 | @Override 18 | public void onSucceeded(TaskExecutor executor) { 19 | } 20 | 21 | @Override 22 | public void onFailed(TaskExecutor executor, Throwable exception) { 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /hutool-db/src/main/java/cn/hutool/db/dialect/impl/Sqlite3Dialect.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.db.dialect.impl; 2 | 3 | import cn.hutool.db.dialect.DialectName; 4 | import cn.hutool.db.sql.Wrapper; 5 | 6 | /** 7 | * SqlLite3方言 8 | * @author loolly 9 | * 10 | */ 11 | public class Sqlite3Dialect extends AnsiSqlDialect{ 12 | private static final long serialVersionUID = -3527642408849291634L; 13 | 14 | public Sqlite3Dialect() { 15 | wrapper = new Wrapper('[', ']'); 16 | } 17 | 18 | @Override 19 | public String dialectName() { 20 | return DialectName.SQLITE3.name(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /hutool-extra/src/main/java/cn/hutool/extra/spring/EnableSpringUtil.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.extra.spring; 2 | 3 | import org.springframework.context.annotation.Import; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | /** 11 | * 启用SpringUtil, 即注入SpringUtil到容器中 12 | * 13 | * @author sidian 14 | */ 15 | @Target(ElementType.TYPE) 16 | @Retention(RetentionPolicy.RUNTIME) 17 | @Import(SpringUtil.class) 18 | public @interface EnableSpringUtil { 19 | } 20 | -------------------------------------------------------------------------------- /hutool-http/src/test/java/cn/hutool/http/HTMLFilterTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.http; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class HTMLFilterTest { 7 | @Test 8 | public void issue3433Test() { 9 | String p1 = "

a

"; 10 | String p2 = "

a

"; 11 | 12 | final HTMLFilter htmlFilter = new HTMLFilter(); 13 | String filter = htmlFilter.filter(p1); 14 | assertEquals("

a

", filter); 15 | 16 | filter = htmlFilter.filter(p2); 17 | assertEquals("

a

", filter); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/convert/impl/CurrencyConverter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.convert.impl; 2 | 3 | import java.util.Currency; 4 | 5 | import cn.hutool.core.convert.AbstractConverter; 6 | 7 | /** 8 | * 货币{@link Currency} 转换器 9 | * 10 | * @author Looly 11 | * @since 3.0.8 12 | */ 13 | public class CurrencyConverter extends AbstractConverter { 14 | private static final long serialVersionUID = 1L; 15 | 16 | @Override 17 | protected Currency convertInternal(Object value) { 18 | return Currency.getInstance(convertToStr(value)); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/date/Issue2612Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.date; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import java.util.Objects; 7 | 8 | public class Issue2612Test { 9 | 10 | @Test 11 | public void parseTest(){ 12 | assertEquals("2022-09-14 23:59:00", 13 | Objects.requireNonNull(DateUtil.parse("2022-09-14T23:59:00-08:00")).toString()); 14 | 15 | assertEquals("2022-09-14 23:59:00", 16 | Objects.requireNonNull(DateUtil.parse("2022-09-14T23:59:00-0800")).toString()); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/io/file/Issue3557Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.io.file; 2 | 3 | import cn.hutool.core.io.FileUtil; 4 | import org.junit.jupiter.api.Disabled; 5 | import org.junit.jupiter.api.Test; 6 | 7 | import java.nio.file.StandardCopyOption; 8 | 9 | public class Issue3557Test { 10 | 11 | @Test 12 | @Disabled 13 | public void copyFileTest() { 14 | // 如果只是文件不存在,则不会报错 15 | // 如果文件所在目录不存在,则会报错 16 | FileUtil.copyFile(FileUtil.getInputStream("d:/test/aaa.xlsx"), FileUtil.file("d:/test2/aaa_copy.xlsx"), StandardCopyOption.REPLACE_EXISTING); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/test/bean/JsonNode.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.test.bean; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | @Data 8 | public class JsonNode implements Serializable { 9 | private static final long serialVersionUID = -2280206942803550272L; 10 | 11 | private Long id; 12 | private Integer parentId; 13 | private String name; 14 | 15 | public JsonNode() { 16 | } 17 | 18 | public JsonNode(Long id, Integer parentId, String name) { 19 | this.id = id; 20 | this.parentId = parentId; 21 | this.name = name; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /hutool-poi/src/main/java/cn/hutool/poi/excel/cell/CellEditor.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.poi.excel.cell; 2 | 3 | import org.apache.poi.ss.usermodel.Cell; 4 | 5 | /** 6 | * 单元格编辑器接口
7 | * 在读取Excel值时,有时我们需要针对所有单元格统一处理结果值(如null转默认值)的情况,实现接口并调用
8 | * reader.setCellEditor()设置编辑器 9 | * 10 | * @author Looly 11 | */ 12 | @FunctionalInterface 13 | public interface CellEditor { 14 | 15 | /** 16 | * 编辑,根据单元格信息处理结果值,返回处理后的结果 17 | * 18 | * @param cell 单元格对象,可以获取单元格行、列样式等信息 19 | * @param value 单元格值 20 | * @return 编辑后的对象 21 | */ 22 | Object edit(Cell cell, Object value); 23 | } 24 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/convert/impl/CharsetConverter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.convert.impl; 2 | 3 | import java.nio.charset.Charset; 4 | 5 | import cn.hutool.core.convert.AbstractConverter; 6 | import cn.hutool.core.util.CharsetUtil; 7 | 8 | /** 9 | * 编码对象转换器 10 | * @author Looly 11 | * 12 | */ 13 | public class CharsetConverter extends AbstractConverter{ 14 | private static final long serialVersionUID = 1L; 15 | 16 | @Override 17 | protected Charset convertInternal(Object value) { 18 | return CharsetUtil.charset(convertToStr(value)); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /hutool-core/src/main/java/cn/hutool/core/io/watch/WatchAction.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.io.watch; 2 | 3 | import java.nio.file.Path; 4 | import java.nio.file.WatchEvent; 5 | 6 | /** 7 | * 监听事件处理函数接口 8 | * 9 | * @author looly 10 | * @since 5.4.0 11 | */ 12 | @FunctionalInterface 13 | public interface WatchAction { 14 | 15 | /** 16 | * 事件处理,通过实现此方法处理各种事件。 17 | * 18 | * 事件可以调用 {@link WatchEvent#kind()}获取,对应事件见{@link WatchKind} 19 | * 20 | * @param event 事件 21 | * @param currentPath 事件发生的当前Path路径 22 | */ 23 | void doAction(WatchEvent event, Path currentPath); 24 | } 25 | -------------------------------------------------------------------------------- /hutool-core/src/test/java/cn/hutool/core/text/csv/IssueICRMKATest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.core.text.csv; 2 | 3 | import cn.hutool.core.io.resource.ResourceUtil; 4 | import org.junit.jupiter.api.Assertions; 5 | import org.junit.jupiter.api.Test; 6 | 7 | public class IssueICRMKATest { 8 | @Test 9 | public void issueICRMAKTest() { 10 | CsvReader reader = CsvUtil.getReader(); 11 | CsvData data = reader.read(ResourceUtil.getUtf8Reader("issueICRMKA.csv")); 12 | final CsvRow row = data.getRow(1); 13 | Assertions.assertEquals("6.3\" Google Pixel 9 Pro 128 GB Beige", row.get(0)); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /hutool-db/src/test/java/cn/hutool/db/nosql/MongoDBTest.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.db.nosql; 2 | 3 | import cn.hutool.db.nosql.mongo.MongoFactory; 4 | import com.mongodb.client.MongoDatabase; 5 | import static org.junit.jupiter.api.Assertions.*; 6 | import org.junit.jupiter.api.Disabled; 7 | import org.junit.jupiter.api.Test; 8 | 9 | /** 10 | * @author VampireAchao 11 | */ 12 | public class MongoDBTest { 13 | 14 | @Test 15 | @Disabled 16 | public void mongoDSTest() { 17 | MongoDatabase db = MongoFactory.getDS("master").getDb("test"); 18 | assertEquals("test", db.getName()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /hutool-json/src/test/java/cn/hutool/json/xml/Issue2748Test.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.json.xml; 2 | 3 | import cn.hutool.core.util.StrUtil; 4 | import cn.hutool.json.JSONException; 5 | import cn.hutool.json.XML; 6 | import static org.junit.jupiter.api.Assertions.*; 7 | import org.junit.jupiter.api.Test; 8 | 9 | public class Issue2748Test { 10 | 11 | @Test 12 | public void toJSONObjectTest() { 13 | final String s = StrUtil.repeat("", 600); 14 | 15 | assertThrows(JSONException.class, () -> { 16 | XML.toJSONObject(s, ParseConfig.of().setMaxNestingDepth(512)); 17 | }); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /hutool-bloomFilter/src/main/java/cn/hutool/bloomfilter/filter/DefaultFilter.java: -------------------------------------------------------------------------------- 1 | package cn.hutool.bloomfilter.filter; 2 | 3 | import cn.hutool.core.util.HashUtil; 4 | 5 | /** 6 | * 默认Bloom过滤器,使用Java自带的Hash算法 7 | * 8 | * @author loolly 9 | */ 10 | public class DefaultFilter extends FuncFilter { 11 | private static final long serialVersionUID = 1L; 12 | 13 | public DefaultFilter(long maxValue) { 14 | this(maxValue, DEFAULT_MACHINE_NUM); 15 | } 16 | 17 | public DefaultFilter(long maxValue, int machineNumber) { 18 | super(maxValue, machineNumber, HashUtil::javaDefaultHash); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /hutool-cron/src/main/java/cn/hutool/cron/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 定时任务模块,提供类Crontab表达式的定时任务,实现参考了Cron4j,同时可以支持秒级别的定时任务定义和年的定义(同时兼容Crontab、Cron4j、Quartz表达式)
3 | * 定时任务模块由三部分组成: 4 | *
    5 | *
  • {@link cn.hutool.cron.Scheduler} 定时任务调度器,用于整体管理任务的增删、启停和触发运行。
  • 6 | *
  • {@link cn.hutool.cron.task.Task} 定时任务实现,用于定义具体的任务
  • 7 | *
  • {@link cn.hutool.cron.pattern.CronPattern} 定时任务表达式,用于定义任务触发时间
  • 8 | *
9 | * 10 | * 同时,提供了{@link cn.hutool.cron.CronUtil}工具类,维护一个全局的{@link cn.hutool.cron.Scheduler}。 11 | * 12 | * @author looly 13 | */ 14 | package cn.hutool.cron; 15 | --------------------------------------------------------------------------------