Apache Commons包含了很多開源的工具,用於解決平時編程經常會遇到的問題,減少重複勞動.我選了一些比較常用的項目做簡單介紹.文中用了很多網上現成的東西,我只是做了一個匯總整理.
一、Commons BeanUtils
http://jakarta.apache.org/commons/beanutils/index.html
說明:針對Bean的一個工具集.由於Bean往往是有一堆get和set組成,BeanUtils也是在此基礎上進行一些包裝.
使用示例:功能有很多,網站上有詳細介紹.一個比較常用的功能是Bean Copy,也就是copy bean的屬性.如果做分層架構開發的話就會用到,比如從PO(Persistent Object)拷貝數據到VO(Value Object).
傳統方法如下:
//得到TeacherForm
TeacherForm teacherForm=(TeacherForm)form;
//構造Teacher對象
Teacher teacher=new Teacher();
//賦值
teacher.setName(teacherForm.getName());
teacher.setAge(teacherForm.getAge());
teacher.setGender(teacherForm.getGender());
teacher.setMajor(teacherForm.getMajor());
teacher.setDepartment(teacherForm.getDepartment());
//持久化Teacher對象到資料庫
HibernateDAO= ;
HibernateDAO.save(teacher);
使用BeanUtils后,代碼就大大改觀了,如下所示:
//得到TeacherForm
TeacherForm teacherForm=(TeacherForm)form;
//構造Teacher對象
Teacher teacher=new Teacher();
//賦值
BeanUtils.copyProperties(teacher,teacherForm);
//持久化Teacher對象到資料庫
HibernateDAO= ;
HibernateDAO.save(teacher);
二、Commons CLI
http://jakarta.apache.org/commons/cli/index.html
說明:這是一個處理命令的工具.比如main方法輸入的string[]需要解析.你可以預先定義好參數的規則,然後就可以調用CLI來解析.
使用示例:
// create Options object
Options options = new Options();
// add t option, option is the command parameter, false indicates that
// this parameter is not required.
options.addOption(「t」, false, 「display current time」);
options.addOption("c", true, "country code");
CommandLineParser parser = new PosixParser();
CommandLine cmd = parser.parse( options, args);
if(cmd.hasOption("t")) {
// print the date and time
}else {
// print the date
}
// get c option value
String countryCode = cmd.getOptionValue("c");
if(countryCode == null) {
// print default date
}else {
// print date for country specified by countryCode
}
三、Commons Codec
http://jakarta.apache.org/commons/codec/index.html
說明:這個工具是用來編碼和解碼的,包括Base64,URL,Soundx等等.用這個工具的人應該很清楚這些,我就不多介紹了.
四、Commons Collections
http://jakarta.apache.org/commons/collections/
五、Commons Configuration
http://jakarta.apache.org/commons/configuration/
說明:這個工具是用來幫助處理配置文件的,支持很多種存儲方式
1. Properties files
2. XML documents
3. Property list files (.plist)
4. JNDI
5. JDBC Datasource
6. System properties
7. Applet parameters
8. Servlet parameters
使用示例:舉一個Properties的簡單例子
# usergui.properties, definining the GUI,
colors.background = #FFFFFF
colors.foreground = #000080
window.width = 500
window.height = 300
PropertiesConfiguration config = new PropertiesConfiguration("usergui.properties");
config.setProperty("colors.background", "#000000);
config.save();
config.save("usergui.backup.properties);//save a copy
Integer integer = config.getInteger("window.width");
六、Commons DBCP
http://jakarta.apache.org/commons/dbcp/
例子:
import java.sql.*;
import com.gwnet.games.antiLord.util.*;
import org.apache.commons.dbcp.ConnectionFactory;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.DataSourceConnectionFactory;
private static BasicDataSource bds=new BasicDataSource();
private static ConnectionFactory fac=null;
//初始化連接池
bds.setDriverClassName(「org.postgresql.Driver」); //資料庫驅動程序
bds.setUrl(「jdbc:postgresql://localhost:5432/myDB」); //資料庫url
bds.setUsername(「postgres」); //dba帳號
bds.setPassword(「XXXXXXXX」); //密碼
bds.setInitialSize(100); //初始化連接數量
bds.setMaxIdle(10); //最大idle數
bds.setMaxWait(1000*60); //超時回收時間
fac=new DataSourceConnectionFactory(bds); //得到連接工廠
Connection conn=fac.createConnection(); //從池中獲得連接
conn.close(); //釋放連接,回到池中
//銷毀連接池
bds.close();
bds=null;
fac=null;
七、Commons DbUtils
http://jakarta.apache.org/commons/dbutils/
說明:我以前在寫資料庫程序的時候,往往把資料庫操作單獨做一個包.DbUtils就是這樣一個工具,以後開發不用再重複這樣的工作了.值得一體的是,這個工具並不是現在流行的OR-Mapping工具(比如Hibernate),只是簡化資料庫操作,比如
QueryRunner run = new QueryRunner(dataSource);
// Execute the query and get the results back from the handler
九、Commons HttpClient
http://jakarta.apache.org/commons/httpclient/
說明:這個工具可以方便通過編程的方式去訪問網站.
使用示例:最簡單的Get操作
GetMethod get = new GetMethod("http://jakarta.apache.org");
// execute method and handle any error responses.
...
InputStream in = get.getResponseBodyAsStream();
// Process the data from the input stream.
get.releaseConnection();
十、Commons IO
http://jakarta.apache.org/commons/io/
說明:可以看成是java.io的擴展,我覺得用起來非常方便.
使用示例:
1.讀取Stream
標準代碼:
InputStream in = new URL( "http://jakarta.apache.org" ).openStream();
try {
InputStreamReader inR = new InputStreamReader( in );
BufferedReader buf = new BufferedReader( inR );
String line;
while ( ( line = buf.readLine() ) != null ) {
System.out.println( line );
}
} finally {
in.close();
}
使用IOUtils
InputStream in = new URL( "http://jakarta.apache.org" ).openStream();
try {
System.out.println( IOUtils.toString( in ) );
} finally {
IOUtils.closeQuietly(in);
}
2.讀取文件
File file = new File("/commons/io/project.properties");
List lines = FileUtils.readLines(file, "UTF-8");
3.察看剩餘空間
long freeSpace = FileSystemUtils.freeSpace("C:/");
十一、Commons JXPath
http://jakarta.apache.org/commons/jxpath/
說明:Xpath你知道吧,那麼JXpath就是基於Java對象的Xpath,也就是用Xpath對Java對象進行查詢.這個東西還是很有想像力的.
使用示例:
Address address = (Address)JXPathContext.newContext(vendor).
getValue("locations[address/zipCode='90210']/address");
上述代碼等同於
Address address = null;
Collection locations = vendor.getLocations();
Iterator it = locations.iterator();
while (it.hasNext()){
Location location = (Location)it.next();
String zipCode = location.getAddress().getZipCode();
十六、Commons Validator
http://jakarta.apache.org/commons/validator/
說明:用來幫助進行驗證的工具.比如驗證Email字元串,日期字元串等是否合法.
使用示例:
// Get the Date validator
DateValidator validator = DateValidator.getInstance();
// Validate/Convert the date
Date fooDate = validator.validate(fooString, "dd/MM/yyyy");
if (fooDate == null) {
// error...not a valid date
return;
}
十七、Commons Virtual File System
http://jakarta.apache.org/commons/vfs/
說明:提供對各種資源的訪問介面.支持的資源類型包括
1. CIFS
2. FTP
3. Local Files
4. HTTP and HTTPS
5. SFTP
6. Temporary Files
7. WebDAV
8. Zip, Jar and Tar (uncompressed, tgz or tbz2)
9. gzip and bzip2
10. res
11. ram
這個包的功能很強大,極大的簡化了程序對資源的訪問.
使用示例:
從jar中讀取文件
// Locate the Jar file
FileSystemManager fsManager = VFS.getManager();
FileObject jarFile = fsManager.resolveFile( "jar:lib/aJarFile.jar" );
// List the children of the Jar file
FileObject[] children = jarFile.getChildren();
System.out.println( "Children of " jarFile.getName().getURI() );
for ( int i = 0; i < children.length; i ){
System.out.println( children[ i ].getName().getBaseName() );
}
從smb讀取文件
StaticUserAuthenticator auth = new StaticUserAuthenticator("username", "password", null);
FileSystemOptions opts = new FileSystemOptions();
二十、Commons Digester
它能方便地將XML文檔所定義的元素轉化為JAVA對象,其實它的用法有點象棧(當然內在的原理就是那個古老的東西,只是提供了更高一層的封裝).
//生成一個digester.主要需要引進commons-logging.jar、commons-collections.jar、commons- beanutils.jar
Digester digester = new Digester();
//設置對XML文檔資料是否進行DTD驗證
digester.setValidating( false );
//當遇見 catalog 元素的時候,產生一個Catalog對象
digester.addObjectCreate( "catalog", Catalog.class );
//當遇見 catalog 元素下面的book的時候,產生一個Book對象
digester.addObjectCreate( "catalog/book", Book.class );
// 當遇見 catalog 元素下面的book的author時候,調用author屬性的Set方法
digester.addBeanPropertySetter( "catalog/book/author", "author" );
digester.addBeanPropertySetter( "catalog/book/title", "title" );
//當再一次遇見 catalog 元素下面的book的時候,調用catalog類的addBook()方法
digester.addSetNext( "catalog/book", "addBook" );
digester.addObjectCreate( "catalog/magazine", Magazine.class );
digester.addBeanPropertySetter( "catalog/magazine/name", "name" );
digester.addObjectCreate( "catalog/magazine/article", Article.class );
//addSetProperties()是將對應元素的屬性賦值.
digester.addSetProperties( "catalog/magazine/article", "page", "page" );
digester.addBeanPropertySetter( "catalog/magazine/article/headline" );
digester.addSetNext( "catalog/magazine/article", "addArticle" );
digester.addSetNext( "catalog/magazine", "addMagazine" );
[火星人 ] Jakarta Commons工具集已經有660次圍觀