妙用Commons良药<一>

妙用commons良药<一>
这一篇文章主要是讲Commons IO的一些内容.
Commons IO提供了org.apache.commons.io.CopyUtils类来将某个InputStream,Reader,byte[]数据或字符串的内容拷贝到OutputStream或Writer.

[code] Writer writer = new FileWriter( "test.dat" );
InputStream inputStream =
getClass( ).getResourceAsStream("./test.resource");
CopyUtils.copy( inputStream, writer );
writer.close( );
inputStream.close( );[/code]


如果需要把信息从Reader或InputStream拷贝到字符串中,请使用IOUtils.toString()方法.
[code] InputStream inStream = url.openStream( );
String contents = IOUtils.toString( inStream );[/code]


通过org.apache.commons.io.IOUtils,你可以很好地关闭某个InputStream,OutputStream,Reader或Writer,而不必担心null或IOException.
[code]try {
File file = new File( "test.dat" );
reader = new FileReader( file );
result = CopyUtils.toString( reader );
} catch( IOException ioe ) {
System.out.println( "Unable to copy file test.dat to a String." );
} finally {
IOUtils.closeQuietly( reader );
}[/code]


使用FileUtils.byteCountToDisplaySize()生成一个字符串,该字符串含有有一个近似的比较好理解的文件的相对大小的值.
[code] File file = new File("project.xml");
long bytes = file.length( );
String display = FileUtils.byteCountToDisplaySize( bytes );[/code]


如果需要将一个文件拷贝为另一个文件,或者需要将某个文件拷贝到某一个目录中,可以使用如下的代码:
拷贝为另一个文件:
[code] File src = new File( "test.dat" );
file dest = new File( "test.dat.bak" );
FileUtils.copyFile( src, dest );[/code]
拷贝到某一个目录:
[code] File src = new File( "test.dat" );
File dir = new File( "./temp" );
FileUtils.copyFileToDirectory( src, dir );[/code]


使用Commons IO,你也可以很方便把字符串的内容写入文件中去,具体的过程不用怎么理会:
[code] String string = "Blah blah blah";
File dest = new File( "test.tmp" );
FileUtils.writeStringToFile( dest, string);[/code]


当然,有另外的一个功能,可以将URL的内容存入文件中去:
[code] URL src = new URL( "http://www.nytimes.com" );
File dest = new File( "times.html" );
FileUtils.copyURLToFile( src, dest );[/code]


如果你需要删除一个目录下的所有内容(包括其目录),可以这样做:
[code] File dir = new File( "temp" );
FileUtils.deleteDirectory( dir );[/code]如果只想清空目录下所有内容,并不删除该目录,可以这样写:FileUtils.cleanDirectory( dir );


很简单地,可以得到一个目录的大小:
[code]File dir = new File( "temp" );
long dirSize = FileUtils.sizeOfDirectory( );[/code]


如果你想得到某个目录下所有以.txt结尾的文件,可以如下这样做:
[code]import java.io.FilenameFilter;
import org.apache.commons.io.filefilter.SuffixFileFilter;
import org.apache.commons.lang.ArrayUtils;

File rootDir = new File(".");
FilenameFilter fileFilter = new SuffixFileFilter(".txt");
String[] txtFiles = rootDir.list( fileFilter );
System.out.println( ArrayUtils.toString( txtFiles ) );[/code]


举另一个例子,怎样列出目录中以.htm和.html结尾的文件
[code]import org.apache.commons.io.filefilter.AndFileFilter;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.filefilter.NotFileFilter;
import org.apache.commons.io.filefilter.OrFileFilter;
import org.apache.commons.io.filefilter.SuffixFileFilter;
import org.apache.commons.lang.ArrayUtils;

IOFileFilter htmlFilter =
new OrFileFilter( new SuffixFileFilter("htm"),new SuffixFileFilter("html") ); //复合两个SuffixFileFilter
IOFileFilter notDirectory = new NotFileFilter( DirectoryFileFilter.INSTANCE ); //拒绝选择目录
FilenameFilter fileFilter = new AndFileFilter( htmlFilter, notDirectory );
String[] htmlFiles = rootDir.list(fileFilter);
System.out.println( ArrayUtils.toString( htmlFiles ));[/code]

注:文中代码来之<<Jakarta Commons Cookbook>>一书第十章
文章待续,会写一些关于commons的笔录下来
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值