[size=large][b][url=http://code.google.com/p/guava-libraries/]guava[/url][/b][/size]是 google 几个java核心类库的集合,包括集合、缓存、原生类型、并发、常用注解、基本字符串操作和I/O等等。
大家平时经常遇到某些相同的问题,自己写代码也都能解决。但是久而久之会感觉到很痛苦,因为我们一而再,再而三的重复发明轮子。为了不再忍受痛苦,也许我们可以总结自己的类库,但是新的问题来了。自己总结的类库很难与大家分享,不能帮助到更多人。同时自己的类库要不断的进行维护。guava 正是出于这样的目的而来的。
只说不练不行啊,让我们举上一两个例子
[b]判断 String不为null,且不为空[/b]
上而的例子还不是很给力,让我们举一个更给力的例子。[b]复制文件[/b]
通过上面的例子,已经能感觉到guava的强大。接下来,让我们更深入看看guava的其他功能。[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/index.html]guava(r09-api)[/url]分为这几个包
[list]
[*][b]base[/b] 基本的工具类与接口
[*][b]io[/b] io流相关的工具类与方法
[*][b]net[/b] 网络地址相关的工具类与方法
[*][b]primitives[/b] 原始类型的工具类
[*][b]collect[/b] 通用集合接口与实现,与其集合相关工具类
[*][b]util.concurrent[/b] 并发相关工具类
[/list]
[size=large][b][url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/base/package-summary.html]base[/url]包[/b][/size]
[b]字符串相关工具类[/b]
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/base/Strings.html]Strings[/url]
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/base/CharMatcher.html]CharMatcher[/url]
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/base/Joiner.html]Jioner[/url]
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/base/Splitter.html]Splitter[/url]
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/base/CaseFormat.html]CaseFormat[/url]
[b]其他[/b]
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/base/Preconditions.html]Preconditions[/url]
有些方法在执行前,先要检查传入的参数是否正确,或者类的状态是否正确。通常会这样做
guava就可以这样,达到相同的效果
[b][size=large][url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/io/package-summary.html]I/O[/url]包[/size][/b]
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/io/ByteStreams.html]ByteStreams[/url]提供了针对字节流的工具方法
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/io/CharStreams.html]CharStreams[/url]提供了针对字符流的工具方法
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/io/Files.html]Files[/url]提供了针对文件的工具方法
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/io/Resources.html]Resources[/url]提供了针对classpath下资源操作的工具方法
大家平时经常遇到某些相同的问题,自己写代码也都能解决。但是久而久之会感觉到很痛苦,因为我们一而再,再而三的重复发明轮子。为了不再忍受痛苦,也许我们可以总结自己的类库,但是新的问题来了。自己总结的类库很难与大家分享,不能帮助到更多人。同时自己的类库要不断的进行维护。guava 正是出于这样的目的而来的。
只说不练不行啊,让我们举上一两个例子
[b]判断 String不为null,且不为空[/b]
String str=...;
//use java
if(str !=null && !str.isEmpty()){
//do something
}
//use guava
if(!Strings.isNullOrEmpty(str)){
//do something
}
上而的例子还不是很给力,让我们举一个更给力的例子。[b]复制文件[/b]
File from=...;
File to=...;
//use java
FileInputStream in=new FileInputStream(from);
FileOutputStream out=new FileOutputStream(to);
byte[] buff=new byte[1024];
int readLength=-1;
while((readLength = in.read(buff)) > 0){
out.write(buff, 0, readLength);
}
in.close();
out.close();
//use guava
Files.copy(from,to); //注意,只用了一行代码噢
通过上面的例子,已经能感觉到guava的强大。接下来,让我们更深入看看guava的其他功能。[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/index.html]guava(r09-api)[/url]分为这几个包
[list]
[*][b]base[/b] 基本的工具类与接口
[*][b]io[/b] io流相关的工具类与方法
[*][b]net[/b] 网络地址相关的工具类与方法
[*][b]primitives[/b] 原始类型的工具类
[*][b]collect[/b] 通用集合接口与实现,与其集合相关工具类
[*][b]util.concurrent[/b] 并发相关工具类
[/list]
[size=large][b][url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/base/package-summary.html]base[/url]包[/b][/size]
[b]字符串相关工具类[/b]
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/base/Strings.html]Strings[/url]
public class StringsTest {
@Test
public void test() {
//将空字符串转换为null
Assert.assertEquals(null, Strings.emptyToNull(""));
//将null转换为空字符串
Assert.assertEquals("", Strings.nullToEmpty(null));
//判断字符串为null或者为空
Assert.assertTrue(Strings.isNullOrEmpty("") && Strings.isNullOrEmpty(null));
//将字符串重复
Assert.assertEquals("javajavajava", Strings.repeat("java", 3));
}
}
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/base/CharMatcher.html]CharMatcher[/url]
public class CharMatcherTest {
@Test
public void test() {
String source = "a1b2c3";
CharMatcher matcher = CharMatcher.DIGIT; //预定义的 DIGIT 类型
Assert.assertTrue(mathcer.match('8'));
Assert.assertEquals("123", matcher.retainFrom(source));
Assert.assertEquals(3, matcher.countIn(source));
Assert.assertEquals("abc", matcher.removeFrom(source));
Assert.assertEquals("a2b3c", matcher.trimFrom("1a2b3c4"));
}
}
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/base/Joiner.html]Jioner[/url]
public class JoinerTest {
@Test
public void test() {
Assert.assertEquals("2011-08-04", Joiner.on("-").join("2011", "08", "04"));
}
}
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/base/Splitter.html]Splitter[/url]
public class SplitterTest {
@Test
public void test() {
Splitter.on(',').split("a,b"); //结果返回Iterable<String>,包含 "a" and "b"
//将结果中的元素trim
//结果依然包含 "a" 和 "b" ,而不是 "a " 和 " b"
Splitter.on(',').trimResults().split("a , b");
//忽略空字符串
//结果必须是"a" 和 "b",而不是 "a" ,"" 和 "b"
Splitter.on(',').omitEmptyStrings().split("a,,b");
}
}
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/base/CaseFormat.html]CaseFormat[/url]
public class CaseFormatTest {
@Test
public void test() throws IOException {
// helloGuava => HELLO_GUAVA
Assert.assertEquals("HELLO_GUAVA", CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, "helloGuava"));
// hello-guava => HelloGuava
Assert.assertEquals("HelloGuava", CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, "hello-guava"));
}
}
[b]其他[/b]
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/base/Preconditions.html]Preconditions[/url]
有些方法在执行前,先要检查传入的参数是否正确,或者类的状态是否正确。通常会这样做
if (count <= 0) {
throw new IllegalArgumentException("must be positive: " + count);
}
guava就可以这样,达到相同的效果
Preconditions.checkArgument(count > 0, "must be positive: %s", count);
[b][size=large][url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/io/package-summary.html]I/O[/url]包[/size][/b]
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/io/ByteStreams.html]ByteStreams[/url]提供了针对字节流的工具方法
InputStream from=...;
OutputStream to=...;
ByteStreams.copy(from,to); //复制
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/io/CharStreams.html]CharStreams[/url]提供了针对字符流的工具方法
Reader from =...;
Writer to =...;
CharStreams.copy(from, to); //复制
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/io/Files.html]Files[/url]提供了针对文件的工具方法
File from=...;
File to=...;
Files.copy(from, to); //复制
Files.deleteDirectoryContents(File directory); //删除文件夹下的内容(包括文件与子文件夹)
Files.deleteRecursively(File file); //删除文件或者文件夹
Files.move(File from, File to); //移动文件
[url=http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/google/common/io/Resources.html]Resources[/url]提供了针对classpath下资源操作的工具方法
URL url = Resources.getResource("config.xml"); //获取classpath根下的config.xml文件url