├── 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 | * 建造者工具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 Filter5 | * 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 | * 分词结果接口定义
4 | * 计算OTP串的公式:
5 | *
3 | * 1、每个字段可自定义
6 | * 时间轮算法介绍:https://www.confluent.io/blog/apache-kafka-purgatory-hierarchical-timing-wheels/
7 | * 见:https://commons.apache.org/proper/commons-compress/
8 | *
3 | * Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
4 | *
7 | * Hutool中的工具方法来自于每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当; Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。 来自Spring Boot
6 | * 作业执行是异步执行,即不同作业、相同作业在不同时间的执行是相互独立的。
19 | * 作业的具体实现需考虑异常情况,默认情况下任务异常在监听中统一监听处理,如果不加入监听,异常会被忽略
5 | * jpinyin(github库作者已删除)封装。
6 | *
9 | * 引入:
10 | *
5 | * pinyin4j(http://sourceforge.net/projects/pinyin4j)封装。
6 | *
9 | * 引入:
10 | *
16 | * 所有Socket使用相同协议对象,类成员变量和对象成员变量易造成并发读写问题。
17 | *
5 | * pinyin(https://github.com/houbb/pinyin)封装。
6 | *
9 | * 引入:
10 | *
5 | * Bopomofo4j封装,项目:https://gitee.com/rnkrsoft/Bopomofo4j。
6 | *
9 | * 引入:
10 | * a a a a
7 | * 实现此接口包装分词器的分词结果,通过实现Iterator相应方法获取分词中的单词
8 | *
9 | * @author looly
10 | *
11 | */
12 | public interface Result extends IterableIter
5 | * 通过实现此接口可以自定义生成对象的策略
6 | *
7 | * @param
5 | * 例如提供自定义的无需回收对象
6 | *
7 | * @param
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
4 | * 2、支持排序 树深度配置,自定义转换器等
5 | * 3、支持额外属性扩展
6 | * 4、贴心 许多属性,特性都有默认值处理
7 | * 5、使用简单 可一行代码生成树
8 | * 6、代码简洁轻量无额外依赖
9 | * 文件上传测试
9 |
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
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
7 | * 通过实现{@link #reset()},重置此{@link Iterator}后可实现复用重新遍历
8 | *
9 | * @param
5 | * 通过实现此接口完成指定类型对象的替换操作,替换后的目标类型依旧为指定类型
6 | *
7 | * @author looly
8 | *
9 | * @param
5 | * 通过实现此接口自定义实现对象的加载方式,例如懒加载机制、多线程加载等
6 | *
7 | * @author looly
8 | *
9 | * @param
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 | *
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 | *
8 | * >> 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
7 | * 用于匹配日期位中对应数字是否匹配
8 | *
9 | * @author Looly
10 | */
11 | public interface PartMatcher extends Matcher
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
5 | * 此编辑器两个作用:
6 | *
7 | *
8 | * 1、如果返回值为{@code null},表示此值被抛弃
9 | * 2、对对象做修改
10 | *
11 | *
12 | * @param
5 | * 所谓规范化,即当两个对象equals时,规范化的对象则可以实现==
6 | * 此包中的相关封装类似于 {@link String#intern()}
7 | *
8 | * @param
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
7 | * 假如前一个作业未完成,下一个调度开始,则不会等待前一个作业,直接执行。
8 | * 关于作业的互斥,请自行加锁完成。
9 | *
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 | *
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
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 | *
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 | *
15 | *
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
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 | *
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
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 = "
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
3 | * 定时任务模块由三部分组成:
4 | *
5 | *
9 | *
10 | * 同时,提供了{@link cn.hutool.cron.CronUtil}工具类,维护一个全局的{@link cn.hutool.cron.Scheduler}。
11 | *
12 | * @author looly
13 | */
14 | package cn.hutool.cron;
15 |
--------------------------------------------------------------------------------