Commons IO使用

我现在使用的是commons-io-1.4.jar


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( );  
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( );  




如果需要把信息从Reader或InputStream拷贝到字符串中,请使用IOUtils.toString()方法.

Java代码
  1. InputStream inStream = url.openStream( );  
  2. String contents = IOUtils.toString( inStream );  
Java代码   收藏代码
  1. InputStream inStream = url.openStream( );  
  2. 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. }  
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. }  




使用FileUtils.byteCountToDisplaySize()生成一个字符串,该字符串含有有一个近似的比较好理解的文件的相对大小的值.

Java代码
  1. File file =  new  File( "project.xml" );  
  2. long  bytes = file.length( );  
  3. String display = FileUtils.byteCountToDisplaySize( bytes );  
Java代码   收藏代码
  1. File file = new File("project.xml");  
  2. long bytes = file.length( );  
  3. 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 );  
Java代码   收藏代码
  1. File src = new File( "test.dat" );  
  2. file dest = new File( "test.dat.bak" );  
  3. FileUtils.copyFile( src, dest );  


拷贝到某一个目录:

Java代码
  1. File src =  new  File(  "test.dat"  );  
  2. File dir = new  File(  "./temp"  );  
  3. FileUtils.copyFileToDirectory( src, dir );  
Java代码   收藏代码
  1. File src = new File( "test.dat" );  
  2. File dir = new File( "./temp" );  
  3. 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);  
Java代码   收藏代码
  1. String string = "Blah blah blah";  
  2. File dest = new File( "test.tmp" );  
  3. 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 );  
Java代码   收藏代码
  1. URL src = new URL( "http://www.nytimes.com" );  
  2. File dest = new File( "times.html" );  
  3. FileUtils.copyURLToFile( src, dest );  




如果你需要删除一个目录下的所有内容(包括其目录),可以这样做:

Java代码
  1. File dir =  new  File(  "temp"  );  
  2. FileUtils.deleteDirectory( dir );  
Java代码   收藏代码
  1. File dir = new File( "temp" );  
  2. FileUtils.deleteDirectory( dir );  

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


很简单地,可以得到一个目录的大小:

Java代码
  1. File dir =  new  File(  "temp"  );  
  2. long  dirSize = FileUtils.sizeOfDirectory( );  
Java代码   收藏代码
  1. File dir = new File( "temp" );  
  2. 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 ));  

如果你想使用Apache Commons IO库来实现监控文件目录,可以使用FileAlterationObserver和FileAlterationListener接口。以下是基本步骤: 1. 创建一个FileAlterationObserver对象,用于监视文件目录的更改 2. 创建一个FileAlterationListener对象,用于处理文件更改事件 3. 将FileAlterationObserver对象和FileAlterationListener对象关联 4. 启动FileAlterationObserver对象,开始监视文件目录的更改 以下是一个示例代码片段,可以使用Apache Commons IO库实现监控文件目录: ``` @Component public class FileWatcher implements FileAlterationListener { @EventListener(ApplicationReadyEvent.class) public void init() { File directory = new File("path/to/directory"); FileAlterationObserver observer = new FileAlterationObserver(directory); observer.addListener(this); FileAlterationMonitor monitor = new FileAlterationMonitor(5000); monitor.addObserver(observer); try { monitor.start(); } catch (Exception ex) { ex.printStackTrace(); } } @Override public void onFileCreate(File file) { System.out.println("File created: " + file.getName()); } @Override public void onFileDelete(File file) { System.out.println("File deleted: " + file.getName()); } @Override public void onFileChange(File file) { System.out.println("File modified: " + file.getName()); } @Override public void onStart(FileAlterationObserver observer) { System.out.println("File watcher started"); } @Override public void onStop(FileAlterationObserver observer) { System.out.println("File watcher stopped"); } } ``` 在这个示例中,我们使用Spring Boot的ApplicationReadyEvent事件来启动文件监控服务。在init()方法中,我们创建了一个FileAlterationObserver对象,并将要监视的路径注册到该对象中。然后,我们创建了一个FileAlterationListener对象,并将其与FileAlterationObserver对象关联。接着,我们创建了一个FileAlterationMonitor对象,并将FileAlterationObserver对象添加到该对象中。最后,我们启动FileAlterationMonitor对象,开始监视文件目录的更改。 在FileAlterationListener接口中,我们实现了onFileCreate()、onFileDelete()和onFileChange()方法来处理文件更改事件。在这些方法中,我们可以采取适当的行动,例如打印出文件创建、删除或修改的信息。同时,我们还实现了onStart()和onStop()方法,用于在文件监控服务启动和停止时执行适当的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值