guava是 google 几个java核心类库的集合,包括集合、缓存、原生类型、并发、常用注解、基本字符串操作和I/O等等。 
   
   大家平时经常遇到某些相同的问题,自己写代码也都能解决。但是久而久之会感觉到很痛苦,因为我们一而再,再而三的重复发明轮子。为了不再忍受痛苦,也许我们可以总结自己的类库,但是新的问题来了。自己总结的类库很难与大家分享,不能帮助到更多人。同时自己的类库要不断的进行维护。guava 正是出于这样的目的而来的。 

   只说不练不行啊,让我们举上一两个例子 
判断 String不为null,且不为空 

Java代码  

1. String str=...;  
2. //use java
3. if(str !=null
4. //do something
5. }  
6.   
7.   
8. //use guava
9. if(!Strings.isNullOrEmpty(str)){  
10. //do something
11. }


上而的例子还不是很给力,让我们举一个更给力的例子。

复制文件

 

Java代码  

1. File from=...;  
2. File to=...;  
3.   
4. //use java
5. FileInputStream in=new
6. FileOutputStream out=new
7. byte[] buff=new byte[1024];  
8. int readLength=-1;  
9. while((readLength = in.read(buff)) > 0){  
10. 0, readLength);  
11. }  
12. in.close();  
13. out.close();  
14.   
15. //use guava
16. Files.copy(from,to); //注意,只用了一行代码噢

    通过上面的例子,已经能感觉到guava的强大。接下来,让我们更深入看看guava的其他功能。

guava(r09-api)

分为这几个包 


  • base              基本的工具类与接口
  • io                 io流相关的工具类与方法
  • net               网络地址相关的工具类与方法
  • primitives        原始类型的工具类
  • collect           通用集合接口与实现,与其集合相关工具类
  • util.concurrent 并发相关工具类



base

 

字符串相关工具类

 

Strings

 

Java代码  

CharMatcher

1. public class
2. @Test
3. public void
4. //将空字符串转换为null
5. null, Strings.emptyToNull(""));  
6. //将null转换为空字符串
7. "", Strings.nullToEmpty(null));  
8. //判断字符串为null或者为空
9. "") && Strings.isNullOrEmpty(null));  
10. //将字符串重复
11. "javajavajava", Strings.repeat("java", 3));  
12.     }  
13. }

 


Java代码  

1. public class
2. @Test
3. public void
4. "a1b2c3";  
5. //预定义的 DIGIT 类型
6. '8'));  
7. "123", matcher.retainFrom(source));  
8. 3, matcher.countIn(source));  
9. "abc", matcher.removeFrom(source));  
10. "a2b3c", matcher.trimFrom("1a2b3c4"));  
11.     }  
12. }


Jioner

 


Java代码  

1. public class
2. @Test
3. public void
4. "2011-08-04", Joiner.on("-").join("2011", "08", "04"));  
5.     }  
6. }

Splitter

 


Java代码  

1. public class
2. @Test
3. public void
4. ',').split("a,b"); //结果返回Iterable<String>,包含 "a" and "b"
5. //将结果中的元素trim
6. //结果依然包含  "a" 和 "b" ,而不是 "a " 和 " b"
7. ',').trimResults().split("a , b");   
8. //忽略空字符串
9. //结果必须是"a" 和 "b",而不是 "a" ,"" 和 "b"
10. ',').omitEmptyStrings().split("a,,b");   
11.     }  
12. }



CaseFormat

1. public class
2.   
3. @Test
4. public void test() throws
5. // helloGuava => HELLO_GUAVA
6. "HELLO_GUAVA", CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, "helloGuava"));  
7. // hello-guava => HelloGuava
8. "HelloGuava", CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, "hello-guava"));  
9.     }  
10. }

其他

 


Preconditions

 

有些方法在执行前,先要检查传入的参数是否正确,或者类的状态是否正确。通常会这样做

Java代码  

1. if (count <= 0) {  
2. throw new IllegalArgumentException("must be positive: "
3. }


guava就可以这样,达到相同的效果 


1. Preconditions.checkArgument(count > 0, "must be positive: %s", count);

I/O

 

ByteStreams

提供了针对字节流的工具方法 


Java代码  

1. InputStream from=...;  
2. OutputStream to=...;  
3. ByteStreams.copy(from,to); //复制


CharStreams

提供了针对字符流的工具方法 


Java代码  

1. Reader from =...;  
2. Writer to =...;  
3. CharStreams.copy(from, to); //复制

Files

提供了针对文件的工具方法 


Java代码  

1. File from=...;  
2. File to=...;  
3. Files.copy(from, to); //复制




Java代码  

1. Files.deleteDirectoryContents(File directory); //删除文件夹下的内容(包括文件与子文件夹)
2. Files.deleteRecursively(File file); //删除文件或者文件夹
3. Files.move(File from, File to); //移动文件



Resources

提供了针对classpath下资源操作的工具方法 


Java代码