1. 程式人生 > >Jodd 一 款優雅的 Java 工具集

Jodd 一 款優雅的 Java 工具集

BeanUtil 最快的bean處理庫。

一個簡單的JavaBean:

1

2

3

4

5

6

7

8

9

10

11

/**

* 拿客

* 網站:www.coderknock.com

* QQ群:213732117

* 三產 創建於 2016年07月02日 22:51:34。

*/

public class Foo {

private String readwrite;   // 提供 getter 和 setter

private

String readonly;    // 只提供getter

... //省略掉個getter和setter

}

使用BeanUtil進行操作:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

import jodd.bean.BeanUtil;

/**

* 拿客

* 網站:www.coderknock.com

* QQ群:213732117

* 三產 創建於 2016年07月02日 22:56:47。

*/

public class TestFoo {

public static void main(String[] args) {

Foo foo = new Foo();

BeanUtil.pojo.setProperty(foo, "readwrite", "readwritedata");

System.out.println(BeanUtil.pojo.getProperty(foo, "readwrite").toString());

BeanUtil.declared.setProperty(foo,

"readonly", "readonlydata");

System.out.println(foo.getReadonly());

}

}

輸出結果:

1

2

readwritedata

readonlydata

注意:如果直接對沒有setter的readonly屬性使用BeanUtil.pojo.setProperty(foo, “readonly”, “readonlydata”);則會報錯:

1

2

3

4

5

6

7

8

9

10

11

Exception in thread "main" jodd.bean.BeanException: Simple property not found: readonly. Invalid property: Foo#readonly (Foo#readonly)

at jodd.bean.BeanUtilBean.setSimpleProperty(BeanUtilBean.java:222)

at jodd.bean.BeanUtilBean._setIndexProperty(BeanUtilBean.java:408)

at jodd.bean.BeanUtilBean.setIndexProperty(BeanUtilBean.java:400)

at jodd.bean.BeanUtilBean.setProperty(BeanUtilBean.java:475)

at bean.TestFoo.main(TestFoo.java:14)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

Cache【目前似乎還沒有完全開發完成】 組通用快取實現。

Printf 為Java提供像C一樣格式化值列印。

1

2

3

4

5

6

7

8

9

10

11

12

13

Printf.str("%+i", 173);     // +173

Printf.str("%04d", 1);      // 0001

Printf.str("%f", 1.7);      // 1.700000

Printf.str("%1.1f", 1.7);   // 1.7

Printf.str("%.4e", 100.1e10);   // 1.0010e+012

Printf.str("%G", 1.1e13);   // 1.1E+013

Printf.str("%l", true);     // true

Printf.str("%L", 123);      // TRUE

Printf.str("%b", 13);       // 1101

Printf.str("%,b", -13);     // 11111111 11111111 11111111 11110011

Printf.str("%#X", 173);     // 0XAD

Printf.str("%,x", -1);      // ffff ffff

Printf.str("%s %s", new String[]{"one", "two"});    // one two

JDateTime 集優雅與最大限度的精確為一體的時間處理庫 【使用教程

Type Converter 方便高效的型別轉換器。

StringUtil 超過100個額外字串工具方法。

StringTemplateParser 簡單的字串模板解析器。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

import jodd.util.StringTemplateParser;

import java.util.HashMap;

import java.util.Map;

/**

* 拿客

* www.coderknock.com

* QQ群:213732117

* 建立時間:2016年07月14日

* 描述:StringTemplateParser

*/

public class JoddStringTemplateParser {

public static void main(String[] args) {

// prepare template

String template = "Hello ${foo}. Today is ${dayName}.";

// prepare data

Map<String, String> map = new HashMap<String, String>();

map.put("foo", "Jodd");

map.put("dayName", "Sunday");

// parse

StringTemplateParser stp = new StringTemplateParser();

String result = stp.parse(template, new StringTemplateParser.MacroResolver() {

public String resolve(String macroName) {

return map.get(macroName);

}

});

// result == "Hello Jodd. Today is Sunday."

}

}

搜尋、掃描、遍歷檔案的一些簡單的方法。

Class finder 在classpath中快速找到對應的類。

Wildcard 在Java中便捷的使用萬用字元。

1

2

3

4

5

6

7

Wildcard.match("CfgOptions.class", "*C*g*cl*");         // true

Wildcard.match("CfgOptions.class", "*g*c**s");          // true

Wildcard.match("CfgOptions.class", "??gOpti*c?ass");    // true

Wildcard.match("CfgOpti*class", "*gOpti\\*class");      // true

Wildcard.match("CfgOptions.class", "C*ti*c?a?*");       // true

Wildcard.matchPath("/foo/soo/doo/boo", "/**/bo*");          // true

Wildcard.matchPath("/foo/one/two/three/boo", "**/t?o/**");  // true

Servlets 各種與Servlet相關的工具集。

Jodd tag library 為JSP提供很多高效實用的標籤。

Form tag 使用一個簡單的標籤為頁面提供自動填充表單的功能。

Class loading in Jodd 為載入類提供一個更好的方法。

Fast buffers 提供比StringBuilder更高效的字串緩衝處理類。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

import jodd.util.buffer.FastCharBuffer;

/**

* 拿客

* www.coderknock.com

* QQ群:213732117

* 建立時間:2016年07月14日

* 描述:FastCharBuffer

*/

public class JoddFastCharBuffer {

public static void main(String[] args) {

long now = System.currentTimeMillis();

FastCharBuffer fb = new FastCharBuffer();

for (int i = 0; i < 1000000; i++) {

fb.append("測試一下效能");

}

System.out.println((System.currentTimeMillis() - now));

now = System.currentTimeMillis();

StringBuilder sb = new StringBuilder();

for (int i = 0; i < 1000000; i++) {

sb.append(i + "");

}

System.out.println((System.currentTimeMillis() - now));

}

}

上面的執行示例,我機器測試結果FastCharBuffer為31毫秒而StringBuilder為101毫秒。

Include-Exclude rules 一款小型的用於過濾資源的規則引擎。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

import jodd.util.InExRules;

/**

* 拿客

* www.coderknock.com

* QQ群:213732117

* 建立時間:2016年07月14日

* 描述:FastCharBuffer

*/

public class JoddFastCharBuffer {

public static void main(String[] args) {

InExRules inExRules = new InExRules<>();

//白名單

inExRules.include("shelf.book.*");

//黑名單

inExRules.exclude("shelf.book.page.1");

System.out.println(inExRules.match("shelf.book.page.1"));//false

System.out.println(inExRules.match("shelf.book"));//true

System.out.println(inExRules.match("shelf.book.page.34"));//true

//萬用字元可以使用*萬用字元

//        InExRules<String, String> WildcardInExRules =

//                new InExRules<String, String>(

//                        InExRuleMatcher.WILDCARD_RULE_MATCHER);

}

}

Dir Watcher 提供一個對目錄的監控,可以在目錄中檔案發生變化時進行一些特定的處理。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

import jodd.io.watch.DirWatcher;

import jodd.io.watch.DirWatcherListener;

import java.io.File;

/**

* 拿客

* www.coderknock.com

* QQ群:213732117

* 建立時間:2016年07月14日

* 描述:JDateTime

*/

public class JoddWatcher {

public static void main(String[] args) {

//只有這個watch.txt檔案修改時才觸發

//        DirWatcher dirWatcher = new DirWatcher("D:\\Windows\\Desktop").monitor("*.txt")

//                .useWatchFile("watch.txt");

//把這個目錄當做空目錄對待(如果目錄裡一開始就有txt檔案會提示 CREATED)

DirWatcher dirWatcher = new DirWatcher("D:\\Windows\\Desktop")

.monitor("*.txt")

.startBlank(true);

dirWatcher.register(new DirWatcherListener() {

public void onChange(File file, DirWatcher.Event event) {

System.out.println(file.getName() + ":" + event.name());

}

});

//這個有點兒問題,修改檔案的命字,只會提示CREATED並不會提示之前的名字的檔案DELETED

dirWatcher.start(1000);

while (true) {//防止主執行緒關閉

}

}

}

Jodd一些模組庫

  • Email 更便捷的郵件收發庫。【使用教程
  • Props 為處理.properties檔案提供更強大、便捷的功能
  • HTTP 一款小型的使用十分簡單且功能強大的HTTP客戶端。【使用教程
  • Methref —強型別方法名引用。
  • SwingSpy 檢查swing元件的層次結構。

上面這些工具類大家可以通過連結去官方瞭解,或者關注我們後期的內容,我們會針對每塊兒都做一個詳細的講解,jodd還有一些更為強大,但相對較為複雜的功能我們也會在後期進行講解。