CopyUtils执行从read到write的数据拷贝

来源:互联网 发布:网络手游赚钱排行榜 编辑:程序博客网 时间:2024/06/05 13:29
Commons IO提供了org.apache.commons.io.CopyUtils类来将某个InputStream,Reader,byte[]数据或字符串的内容拷贝到OutputStream或Writer. 
Java代码  收藏代码
  1. Writer writer = new FileWriter( "test.dat" );    
  2. InputStream inputStream =  
  3.             getClass( ).getResourceAsStream("./test.resource");    
  4. CopyUtils.copy( inputStream, writer );    
  5. writer.close( );    
  6. inputStream.close( );    
  7.   
  8. Writer writer = new FileWriter( "test.dat" );   
  9. InputStream inputStream =   
  10.         getClass( ).getResourceAsStream("./test.resource"); CopyUtils.copy( inputStream, writer );   
  11. writer.close( );   
  12. inputStream.close( );   


如果需要把信息从Reader或InputStream拷贝到字符串中,请使用IOUtils.toString()方法. 
Java代码  收藏代码
  1. InputStream inStream = url.openStream( );    
  2. String contents = IOUtils.toString( inStream );    
  3.   
  4. InputStream inStream = url.openStream( );   
  5. String contents = IOUtils.toString( inStream );   


通过org.apache.commons.io.IOUtils,你可以很好地关闭某个InputStream,OutputStream,Reader或Writer,而不必担心null或IOException. 
Java代码  收藏代码
  1. try {    
  2.   File file = new File( "test.dat" );    
  3.   reader = new FileReader( file );    
  4.   result = CopyUtils.toString( reader );    
  5.   } catch( IOException ioe ) {    
  6.   System.out.println("Unable to copy file test.dat to a String." );    
  7.   } finally {    
  8.     IOUtils.closeQuietly( reader );    
  9.   }    
  10.   
  11.  try {   
  12.    File file = new File( "test.dat" );   
  13.    reader = new FileReader( file );   
  14.    result = CopyUtils.toString( reader );   
  15.  } catch( IOException ioe ) {   
  16.    System.out.println("Unable to copy file test.dat to a String." );   
  17.  } finally {   
  18.    IOUtils.closeQuietly( reader );   
  19.  }   


使用FileUtils.byteCountToDisplaySize()生成一个字符串,该字符串含有有一个近似的比较好理解的文件的相对大小的值. 
Java代码  收藏代码
  1. File file = new File("project.xml");    
  2. long bytes = file.length( );    
  3. String display = FileUtils.byteCountToDisplaySize( bytes );    
  4.   
  5. File file = new File("project.xml");   
  6. long bytes = file.length( );   
  7. String display = FileUtils.byteCountToDisplaySize( bytes );   


如果需要将一个文件拷贝为另一个文件,或者需要将某个文件拷贝到某一个目录中,可以使用如下的代码: 
拷贝为另一个文件: 
Java代码  收藏代码
  1.  File src = new File( "test.dat" );    
  2. file dest = new File( "test.dat.bak" );    
  3. FileUtils.copyFile( src, dest );    
  4.   
  5. File src = new File( "test.dat" );   
  6. file dest = new File( "test.dat.bak" );   
  7. FileUtils.copyFile( src, dest );   

拷贝到某一个目录: 
Java代码  收藏代码
  1. File src = new File( "test.dat" );    
  2. File dir = new File( "./temp" );    
  3. FileUtils.copyFileToDirectory( src, dir );    
  4.   
  5.  File src = new File( "test.dat" );   
  6.  File dir = new File( "./temp" );   
  7.  FileUtils.copyFileToDirectory( src, dir );   


使用Commons IO,你也可以很方便把字符串的内容写入文件中去,具体的过程不用怎么理会: 
Java代码  收藏代码
  1.  String string = "Blah blah blah";    
  2.  File dest = new File( "test.tmp" );    
  3.  FileUtils.writeStringToFile( dest, string);    
  4.   
  5. String string = "Blah blah blah";   
  6. File dest = new File( "test.tmp" );   
  7. FileUtils.writeStringToFile( dest, string);   


当然,有另外的一个功能,可以将URL的内容存入文件中去: 
Java代码  收藏代码
  1. URL src = new URL( "http://www.nytimes.com" );    
  2. File dest = new File( "times.html" );    
  3. FileUtils.copyURLToFile( src, dest );    
  4.   
  5.  URL src = new URL( "http://www.nytimes.com" );   
  6.  File dest = new File( "times.html" );   
  7.  FileUtils.copyURLToFile( src, dest );   


如果你需要删除一个目录下的所有内容(包括其目录),可以这样做: 
Java代码  收藏代码
  1. File dir = new File( "temp" );    
  2. FileUtils.deleteDirectory( dir );    
  3.   
  4. File dir = new File( "temp" );   
  5. FileUtils.deleteDirectory( dir );   


如果只想清空目录下所有内容,并不删除该目录,可以这样写: 
Java代码  收藏代码
  1. FileUtils.cleanDirectory( dir );  


很简单地,可以得到一个目录的大小: 
Java代码  收藏代码
  1. File dir = new File( "temp" );    
  2. long dirSize = FileUtils.sizeOfDirectory( );    
  3.   
  4. File dir = new File( "temp" );   
  5. long dirSize = FileUtils.sizeOfDirectory( );   


如果你想得到某个目录下所有以.txt结尾的文件,可以如下这样做: 
Java代码  收藏代码
  1. import java.io.FilenameFilter;    
  2. import org.apache.commons.io.filefilter.SuffixFileFilter;    
  3. import org.apache.commons.lang.ArrayUtils;    
  4.      
  5. File rootDir = new File(".");    
  6. FilenameFilter fileFilter = new SuffixFileFilter(".txt");    
  7. String[] txtFiles = rootDir.list( fileFilter );    
  8. System.out.println( ArrayUtils.toString( txtFiles ) );    
Java代码  收藏代码
  1. import java.io.FilenameFilter;   
  2. import org.apache.commons.io.filefilter.SuffixFileFilter;   
  3. import org.apache.commons.lang.ArrayUtils;   
  4.   
  5. File rootDir = new File(".");   
  6. FilenameFilter fileFilter = new SuffixFileFilter(".txt");   
  7. String[] txtFiles = rootDir.list( fileFilter );   
  8. System.out.println( ArrayUtils.toString( txtFiles ) );   


举另一个例子,怎样列出目录中以.htm和.html结尾的文件 
Java代码  收藏代码
  1. import org.apache.commons.io.filefilter.AndFileFilter;    
  2. import org.apache.commons.io.filefilter.DirectoryFileFilter;    
  3. import org.apache.commons.io.filefilter.IOFileFilter;    
  4. import org.apache.commons.io.filefilter.NotFileFilter;    
  5. import org.apache.commons.io.filefilter.OrFileFilter;    
  6. import org.apache.commons.io.filefilter.SuffixFileFilter;    
  7. import org.apache.commons.lang.ArrayUtils;    
  8.     
  9. IOFileFilter htmlFilter =     
  10.    new OrFileFilter( new SuffixFileFilter("htm"),new SuffixFileFilter("html") ); //复合两个SuffixFileFilter    
  11. IOFileFilter notDirectory = new NotFileFilter( DirectoryFileFilter.INSTANCE );    //拒绝选择目录    
  12.  FilenameFilter fileFilter = new AndFileFilter( htmlFilter, notDirectory );    
  13. String[] htmlFiles = rootDir.list(fileFilter);    
  14. System.out.println( ArrayUtils.toString( htmlFiles ));    
Java代码  收藏代码
  1. import org.apache.commons.io.filefilter.AndFileFilter;   
  2. import org.apache.commons.io.filefilter.DirectoryFileFilter;   
  3. import org.apache.commons.io.filefilter.IOFileFilter;   
  4. import org.apache.commons.io.filefilter.NotFileFilter;   
  5. import org.apache.commons.io.filefilter.OrFileFilter;   
  6. import org.apache.commons.io.filefilter.SuffixFileFilter;   
  7. import org.apache.commons.lang.ArrayUtils;   
  8.   
  9. IOFileFilter htmlFilter =   
  10.     new OrFileFilter( new SuffixFileFilter("htm"),new SuffixFileFilter("html") ); //复合两个SuffixFileFilter   
  11. IOFileFilter notDirectory = new NotFileFilter( DirectoryFileFilter.INSTANCE );    //拒绝选择目录   
  12. FilenameFilter fileFilter = new AndFileFilter( htmlFilter, notDirectory );   
  13. String[] htmlFiles = rootDir.list(fileFilter);   
  14. System.out.println( ArrayUtils.toString( htmlFiles ));