ouzhoudijie 发表于 2017-1-13 09:55:27

apache common io包基本使用(包括文件的监听,过来,比较等)

  原文参考 
http://www.javacodegeeks.com/2014/10/apache-commons-io-tutorial.html 

  Apache Commons IO 包绝对是好东西,地址在http://commons.apache.org/proper/commons-io/,下面用例子分别介绍: 
  1)  工具类 
  2) 输入 
  3) 输出 
  4) filters过滤 
  5) Comparators 
  6) 文件监控 
  
   总的入口例子为: 
  
Java代码  


[*]public class ApacheCommonsExampleMain {  
[*]  
[*]    public static void main(String[] args) {  
[*]        UtilityExample.runExample();  
[*]          
[*]        FileMonitorExample.runExample();  
[*]          
[*]        FiltersExample.runExample();  
[*]          
[*]        InputExample.runExample();  
[*]          
[*]        OutputExample.runExample();  
[*]          
[*]        ComparatorExample.runExample();  
[*]    }  
[*]}  

  


一  工具类包UtilityExample代码: 

    这个工具类包分如下几个主要工具类: 
     1) FilenameUtils:主要处理各种操作系统下对文件名的操作 
     2) FileUtils:处理文件的打开,移动,读取和判断文件是否存在 
    3) IOCASE:字符串的比较 
    4) FileSystemUtils:返回磁盘的空间大小 

   
Java代码  


[*]import java.io.File;  
[*]import java.io.IOException;  
[*]  
[*]import org.apache.commons.io.FileSystemUtils;  
[*]import org.apache.commons.io.FileUtils;  
[*]import org.apache.commons.io.FilenameUtils;  
[*]import org.apache.commons.io.LineIterator;  
[*]import org.apache.commons.io.IOCase;  
[*]  
[*]public final class UtilityExample {  
[*]      
[*]    // We are using the file exampleTxt.txt in the folder ExampleFolder,  
[*]    // and we need to provide the full path to the Utility classes.  
[*]    private static final String EXAMPLE_TXT_PATH =  
[*]            "C:\\Users\\Lilykos\\workspace\\ApacheCommonsExample\\ExampleFolder\\exampleTxt.txt";  
[*]      
[*]    private static final String PARENT_DIR =  
[*]            "C:\\Users\\Lilykos\\workspace\\ApacheCommonsExample";  
[*]  
[*]    public static void runExample() throws IOException {  
[*]        System.out.println("Utility Classes example...");  
[*]          
[*]          
[*]        // FilenameUtils  
[*]          
[*]        System.out.println("Full path of exampleTxt: " +  
[*]                FilenameUtils.getFullPath(EXAMPLE_TXT_PATH));  
[*]          
[*]        System.out.println("Full name of exampleTxt: " +  
[*]                FilenameUtils.getName(EXAMPLE_TXT_PATH));  
[*]          
[*]        System.out.println("Extension of exampleTxt: " +  
[*]                FilenameUtils.getExtension(EXAMPLE_TXT_PATH));  
[*]          
[*]        System.out.println("Base name of exampleTxt: " +  
[*]                FilenameUtils.getBaseName(EXAMPLE_TXT_PATH));  
[*]          
[*]          
[*]        // FileUtils  
[*]          
[*]        // We can create a new File object using FileUtils.getFile(String)  
[*]        // and then use this object to get information from the file.  
[*]        File exampleFile = FileUtils.getFile(EXAMPLE_TXT_PATH);  
[*]        LineIterator iter = FileUtils.lineIterator(exampleFile);  
[*]          
[*]        System.out.println("Contents of exampleTxt...");  
[*]        while (iter.hasNext()) {  
[*]            System.out.println("\t" + iter.next());  
[*]        }  
[*]        iter.close();  
[*]          
[*]        // We can check if a file exists somewhere inside a certain directory.  
[*]        File parent = FileUtils.getFile(PARENT_DIR);  
[*]        System.out.println("Parent directory contains exampleTxt file: " +  
[*]                FileUtils.directoryContains(parent, exampleFile));  
[*]          
[*]          
[*]        // IOCase  
[*]          
[*]        String str1 = "This is a new String.";  
[*]        String str2 = "This is another new String, yes!";  
[*]          
[*]        System.out.println("Ends with string (case sensitive): " +  
[*]                IOCase.SENSITIVE.checkEndsWith(str1, "string."));  
[*]        System.out.println("Ends with string (case insensitive): " +  
[*]                IOCase.INSENSITIVE.checkEndsWith(str1, "string."));  
[*]          
[*]        System.out.println("String equality: " +  
[*]                IOCase.SENSITIVE.checkEquals(str1, str2));  
[*]          
[*]          
[*]        // FileSystemUtils  
[*]        System.out.println("Free disk space (in KB): " + FileSystemUtils.freeSpaceKb("C:"));  
[*]        System.out.println("Free disk space (in MB): " + FileSystemUtils.freeSpaceKb("C:") / 1024);  
[*]    }  
[*]}  

  


输出: 
Java代码  


[*]Utility Classes example...  
[*]Full path of exampleTxt: C:\Users\Lilykos\workspace\ApacheCommonsExample\ExampleFolder\  
[*]Full name of exampleTxt: exampleTxt.txt  
[*]Extension of exampleTxt: txt  
[*]Base name of exampleTxt: exampleTxt  
[*]Contents of exampleTxt...  
[*]    This is an example text file.  
[*]    We will use it for experimenting with Apache Commons IO.  
[*]Parent directory contains exampleTxt file: true  
[*]Ends with string (case sensitive): false  
[*]Ends with string (case insensitive): true  
[*]String equality: false  
[*]Free disk space (in KB): 32149292  
[*]Free disk space (in MB): 31395  

  


二  FileMonitor工具类包 
   这个org.apache.commons.io.monitor 包中的工具类可以监视文件或者目录的变化,获得指定文件或者目录的相关信息,下面看例子: 
  
Java代码  


[*]import java.io.File;  
[*]import java.io.IOException;  
[*]  
[*]import org.apache.commons.io.FileDeleteStrategy;  
[*]import org.apache.commons.io.FileUtils;  
[*]import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;  
[*]import org.apache.commons.io.monitor.FileAlterationMonitor;  
[*]import org.apache.commons.io.monitor.FileAlterationObserver;  
[*]import org.apache.commons.io.monitor.FileEntry;  
[*]  
[*]  
[*]public final class FileMonitorExample {  
[*]      
[*]    private static final String EXAMPLE_PATH =  
[*]            "C:\\Users\\Lilykos\\workspace\\ApacheCommonsExample\\ExampleFolder\\exampleFileEntry.txt";  
[*]      
[*]    private static final String PARENT_DIR =  
[*]            "C:\\Users\\Lilykos\\workspace\\ApacheCommonsExample\\ExampleFolder";  
[*]      
[*]    private static final String NEW_DIR =  
[*]            "C:\\Users\\Lilykos\\workspace\\ApacheCommonsExample\\ExampleFolder\\newDir";  
[*]      
[*]    private static final String NEW_FILE =  
[*]            "C:\\Users\\Lilykos\\workspace\\ApacheCommonsExample\\ExampleFolder\\newFile.txt";  
[*]  
[*]    public static void runExample() {  
[*]        System.out.println("File Monitor example...");  
[*]          
[*]          
[*]        // FileEntry  
[*]          
[*]        // We can monitor changes and get information about files  
[*]        // using the methods of this class.  
[*]        FileEntry entry = new FileEntry(FileUtils.getFile(EXAMPLE_PATH));  
[*]          
[*]        System.out.println("File monitored: " + entry.getFile());  
[*]        System.out.println("File name: " + entry.getName());  
[*]        System.out.println("Is the file a directory?: " + entry.isDirectory());  
[*]          
[*]          
[*]        // File Monitoring  
[*]          
[*]        // Create a new observer for the folder and add a listener  
[*]        // that will handle the events in a specific directory and take action.  
[*]        File parentDir = FileUtils.getFile(PARENT_DIR);  
[*]          
[*]        FileAlterationObserver observer = new FileAlterationObserver(parentDir);  
[*]        observer.addListener(new FileAlterationListenerAdaptor() {  
[*]              
[*]                @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 onDirectoryCreate(File dir) {  
[*]                    System.out.println("Directory created: " + dir.getName());  
[*]                }  
[*]                  
[*]                @Override  
[*]                public void onDirectoryDelete(File dir) {  
[*]                    System.out.println("Directory deleted: " + dir.getName());  
[*]                }  
[*]        });  
[*]          
[*]        // Add a monior that will check for events every x ms,  
[*]        // and attach all the different observers that we want.  
[*]        FileAlterationMonitor monitor = new FileAlterationMonitor(500, observer);  
[*]        try {  
[*]            monitor.start();  
[*]          
[*]            // After we attached the monitor, we can create some files and directories  
[*]            // and see what happens!  
[*]            File newDir = new File(NEW_DIR);  
[*]            File newFile = new File(NEW_FILE);  
[*]              
[*]            newDir.mkdirs();  
[*]            newFile.createNewFile();  
[*]                  
[*]            Thread.sleep(1000);  
[*]              
[*]            FileDeleteStrategy.NORMAL.delete(newDir);  
[*]            FileDeleteStrategy.NORMAL.delete(newFile);  
[*]              
[*]            Thread.sleep(1000);  
[*]              
[*]            monitor.stop();  
[*]        } catch (IOException e) {  
[*]            e.printStackTrace();  
[*]        } catch (InterruptedException e) {  
[*]            e.printStackTrace();  
[*]        } catch (Exception e) {  
[*]            e.printStackTrace();  
[*]        }  
[*]    }  
[*]}  

  
输出如下: 
  
Java代码  


[*]File Monitor example...  
[*]File monitored: C:\Users\Lilykos\workspace\ApacheCommonsExample\ExampleFolder\exampleFileEntry.txt  
[*]File name: exampleFileEntry.txt  
[*]Is the file a directory?: false  
[*]Directory created: newDir  
[*]File created: newFile.txt  
[*]Directory deleted: newDir  
[*]File deleted: newFile.txt  

  

    上面的特性的确很赞!分析下,这个工具类包下的工具类,可以允许我们创建跟踪文件或目录变化的监听句柄,当文件目录等发生任何变化,都可以用“观察者”的身份进行观察, 
其步骤如下: 
   1) 创建要监听的文件对象 
   2) 创建FileAlterationObserver 监听对象,在上面的例子中, 
   File parentDir = FileUtils.getFile(PARENT_DIR); 
  FileAlterationObserver observer = new FileAlterationObserver(parentDir); 
   创建的是监视parentDir目录的变化, 
   3) 为观察器创建FileAlterationListenerAdaptor的内部匿名类,增加对文件及目录的增加删除的监听 
   4) 创建FileAlterationMonitor监听类,每隔500ms监听目录下的变化,其中开启监视是用monitor的start方法即可。 

三  过滤器 filters 
   先看例子: 
  
Java代码  


[*]import java.io.File;  
[*]  
[*]import org.apache.commons.io.FileUtils;  
[*]import org.apache.commons.io.IOCase;  
[*]import org.apache.commons.io.filefilter.AndFileFilter;  
[*]import org.apache.commons.io.filefilter.NameFileFilter;  
[*]import org.apache.commons.io.filefilter.NotFileFilter;  
[*]import org.apache.commons.io.filefilter.OrFileFilter;  
[*]import org.apache.commons.io.filefilter.PrefixFileFilter;  
[*]import org.apache.commons.io.filefilter.SuffixFileFilter;  
[*]import org.apache.commons.io.filefilter.WildcardFileFilter;  
[*]  
[*]public final class FiltersExample {  
[*]      
[*]    private static final String PARENT_DIR =  
[*]            "C:\\Users\\Lilykos\\workspace\\ApacheCommonsExample\\ExampleFolder";  
[*]  
[*]    public static void runExample() {  
[*]        System.out.println("File Filter example...");  
[*]          
[*]          
[*]        // NameFileFilter  
[*]        // Right now, in the parent directory we have 3 files:  
[*]        //      directory example  
[*]        //      file exampleEntry.txt  
[*]        //      file exampleTxt.txt  
[*]          
[*]        // Get all the files in the specified directory  
[*]        // that are named "example".  
[*]        File dir = FileUtils.getFile(PARENT_DIR);  
[*]        String[] acceptedNames = {"example", "exampleTxt.txt"};  
[*]        for (String file: dir.list(new NameFileFilter(acceptedNames, IOCase.INSENSITIVE))) {  
[*]            System.out.println("File found, named: " + file);  
[*]        }  
[*]          
[*]          
[*]        //WildcardFileFilter  
[*]        // We can use wildcards in order to get less specific results  
[*]        //      ? used for 1 missing char  
[*]        //      * used for multiple missing chars  
[*]        for (String file: dir.list(new WildcardFileFilter("*ample*"))) {  
[*]            System.out.println("Wildcard file found, named: " + file);  
[*]        }  
[*]          
[*]          
[*]        // PrefixFileFilter   
[*]        // We can also use the equivalent of startsWith  
[*]        // for filtering files.  
[*]        for (String file: dir.list(new PrefixFileFilter("example"))) {  
[*]            System.out.println("Prefix file found, named: " + file);  
[*]        }  
[*]          
[*]          
[*]        // SuffixFileFilter  
[*]        // We can also use the equivalent of endsWith  
[*]        // for filtering files.  
[*]        for (String file: dir.list(new SuffixFileFilter(".txt"))) {  
[*]            System.out.println("Suffix file found, named: " + file);  
[*]        }  
[*]          
[*]          
[*]        // OrFileFilter   
[*]        // We can use some filters of filters.  
[*]        // in this case, we use a filter to apply a logical   
[*]        // or between our filters.  
[*]        for (String file: dir.list(new OrFileFilter(  
[*]                new WildcardFileFilter("*ample*"), new SuffixFileFilter(".txt")))) {  
[*]            System.out.println("Or file found, named: " + file);  
[*]        }  
[*]          
[*]        // And this can become very detailed.  
[*]        // Eg, get all the files that have "ample" in their name  
[*]        // but they are not text files (so they have no ".txt" extension.  
[*]        for (String file: dir.list(new AndFileFilter( // we will match 2 filters...  
[*]                new WildcardFileFilter("*ample*"), // ...the 1st is a wildcard...  
[*]                new NotFileFilter(new SuffixFileFilter(".txt"))))) { // ...and the 2nd is NOT .txt.  
[*]            System.out.println("And/Not file found, named: " + file);  
[*]        }  
[*]    }  
[*]}  

  
      可以看清晰看到,使用过滤器,可以分别在指定的目录下,寻找符合条件 
的文件,比如以什么开头的文件名,支持通配符,甚至支持多个过滤器进行或的操作! 
  输出如下: 
 
Java代码  


[*]File Filter example...  
[*]File found, named: example  
[*]File found, named: exampleTxt.txt  
[*]Wildcard file found, named: example  
[*]Wildcard file found, named: exampleFileEntry.txt  
[*]Wildcard file found, named: exampleTxt.txt  
[*]Prefix file found, named: example  
[*]Prefix file found, named: exampleFileEntry.txt  
[*]Prefix file found, named: exampleTxt.txt  
[*]Suffix file found, named: exampleFileEntry.txt  
[*]Suffix file found, named: exampleTxt.txt  
[*]Or file found, named: example  
[*]Or file found, named: exampleFileEntry.txt  
[*]Or file found, named: exampleTxt.txt  
[*]And/Not file found, named: example  

  


四  Comparators比较器 
   org.apache.commons.io.comparator包下的工具类,可以方便进行文件的比较: 
Java代码  


[*]import java.io.File;  
[*]import java.util.Date;  
[*]  
[*]import org.apache.commons.io.FileUtils;  
[*]import org.apache.commons.io.IOCase;  
[*]import org.apache.commons.io.comparator.LastModifiedFileComparator;  
[*]import org.apache.commons.io.comparator.NameFileComparator;  
[*]import org.apache.commons.io.comparator.SizeFileComparator;  
[*]  
[*]public final class ComparatorExample {  
[*]      
[*]    private static final String PARENT_DIR =  
[*]            "C:\\Users\\Lilykos\\workspace\\ApacheCommonsExample\\ExampleFolder";  
[*]      
[*]    private static final String FILE_1 =  
[*]            "C:\\Users\\Lilykos\\workspace\\ApacheCommonsExample\\ExampleFolder\\example";  
[*]      
[*]    private static final String FILE_2 =  
[*]            "C:\\Users\\Lilykos\\workspace\\ApacheCommonsExample\\ExampleFolder\\exampleTxt.txt";  
[*]      
[*]    public static void runExample() {  
[*]        System.out.println("Comparator example...");  
[*]          
[*]        //NameFileComparator  
[*]          
[*]        // Let's get a directory as a File object  
[*]        // and sort all its files.  
[*]        File parentDir = FileUtils.getFile(PARENT_DIR);  
[*]        NameFileComparator comparator = new NameFileComparator(IOCase.SENSITIVE);  
[*]        File[] sortedFiles = comparator.sort(parentDir.listFiles());  
[*]          
[*]        System.out.println("Sorted by name files in parent directory: ");  
[*]        for (File file: sortedFiles) {  
[*]            System.out.println("\t"+ file.getAbsolutePath());  
[*]        }  
[*]          
[*]          
[*]        // SizeFileComparator  
[*]          
[*]        // We can compare files based on their size.  
[*]        // The boolean in the constructor is about the directories.  
[*]        //      true: directory's contents count to the size.  
[*]        //      false: directory is considered zero size.  
[*]        SizeFileComparator sizeComparator = new SizeFileComparator(true);  
[*]        File[] sizeFiles = sizeComparator.sort(parentDir.listFiles());  
[*]          
[*]        System.out.println("Sorted by size files in parent directory: ");  
[*]        for (File file: sizeFiles) {  
[*]            System.out.println("\t"+ file.getName() + " with size (kb): " + file.length());  
[*]        }  
[*]          
[*]          
[*]        // LastModifiedFileComparator  
[*]          
[*]        // We can use this class to find which file was more recently modified.  
[*]        LastModifiedFileComparator lastModified = new LastModifiedFileComparator();  
[*]        File[] lastModifiedFiles = lastModified.sort(parentDir.listFiles());  
[*]          
[*]        System.out.println("Sorted by last modified files in parent directory: ");  
[*]        for (File file: lastModifiedFiles) {  
[*]            Date modified = new Date(file.lastModified());  
[*]            System.out.println("\t"+ file.getName() + " last modified on: " + modified);  
[*]        }  
[*]          
[*]        // Or, we can also compare 2 specific files and find which one was last modified.  
[*]        //      returns > 0 if the first file was last modified.  
[*]        //      returns  0)  
[*]            System.out.println("File " + file1.getName() + " was modified last because...");  
[*]        else  
[*]            System.out.println("File " + file2.getName() + "was modified last because...");  
[*]          
[*]        System.out.println("\t"+ file1.getName() + " last modified on: " +  
[*]                new Date(file1.lastModified()));  
[*]        System.out.println("\t"+ file2.getName() + " last modified on: " +  
[*]                new Date(file2.lastModified()));  
[*]    }  
[*]}  

  

   输出如下: 
Java代码  


[*]Comparator example...  
[*]Sorted by name files in parent directory:   
[*]    C:\Users\Lilykos\workspace\ApacheCommonsExample\ExampleFolder\comparator1.txt  
[*]    C:\Users\Lilykos\workspace\ApacheCommonsExample\ExampleFolder\comperator2.txt  
[*]    C:\Users\Lilykos\workspace\ApacheCommonsExample\ExampleFolder\example  
[*]    C:\Users\Lilykos\workspace\ApacheCommonsExample\ExampleFolder\exampleFileEntry.txt  
[*]    C:\Users\Lilykos\workspace\ApacheCommonsExample\ExampleFolder\exampleTxt.txt  
[*]Sorted by size files in parent directory:   
[*]    example with size (kb): 0  
[*]    exampleTxt.txt with size (kb): 87  
[*]    exampleFileEntry.txt with size (kb): 503  
[*]    comperator2.txt with size (kb): 1458  
[*]    comparator1.txt with size (kb): 4436  
[*]Sorted by last modified files in parent directory:   
[*]    exampleTxt.txt last modified on: Sun Oct 26 14:02:22 EET 2014  
[*]    example last modified on: Sun Oct 26 23:42:55 EET 2014  
[*]    comparator1.txt last modified on: Tue Oct 28 14:48:28 EET 2014  
[*]    comperator2.txt last modified on: Tue Oct 28 14:48:52 EET 2014  
[*]    exampleFileEntry.txt last modified on: Tue Oct 28 14:53:50 EET 2014  
[*]File example was modified last because...  
[*]    example last modified on: Sun Oct 26 23:42:55 EET 2014  
[*]    exampleTxt.txt last modified on: Sun Oct 26 14:02:22 EET 2014  

  


    可以看到,在上面的代码中 
NameFileComparator: 文件名的比较器,可以进行文件名称排序; 
SizeFileComparator: 按照文件大小比较 
LastModifiedFileComparator: 根据最新修改日期比较 

五  input包 
    在 common io的org.apache.commons.io.input 包中,有各种对InputStream的实现类: 
我们看下其中的TeeInputStream, ,它接受InputStream和Outputstream参数,例子如下: 
  
Java代码  


[*]import java.io.ByteArrayInputStream;  
[*]import java.io.ByteArrayOutputStream;  
[*]import java.io.File;  
[*]import java.io.IOException;  
[*]  
[*]import org.apache.commons.io.FileUtils;  
[*]import org.apache.commons.io.input.TeeInputStream;  
[*]import org.apache.commons.io.input.XmlStreamReader;  
[*]  
[*]  
[*]public final class InputExample {  
[*]      
[*]    private static final String XML_PATH =  
[*]            "C:\\Users\\Lilykos\\workspace\\ApacheCommonsExample\\InputOutputExampleFolder\\web.xml";  
[*]      
[*]    private static final String INPUT = "This should go to the output.";  
[*]  
[*]    public static void runExample() {  
[*]        System.out.println("Input example...");  
[*]        XmlStreamReader xmlReader = null;  
[*]        TeeInputStream tee = null;  
[*]          
[*]        try {  
[*]              
[*]            // XmlStreamReader  
[*]              
[*]            // We can read an xml file and get its encoding.  
[*]            File xml = FileUtils.getFile(XML_PATH);  
[*]              
[*]            xmlReader = new XmlStreamReader(xml);  
[*]            System.out.println("XML encoding: " + xmlReader.getEncoding());  
[*]              
[*]              
[*]            // TeeInputStream  
[*]              
[*]            // This very useful class copies an input stream to an output stream  
[*]            // and closes both using only one close() method (by defining the 3rd  
[*]            // constructor parameter as true).  
[*]            ByteArrayInputStream in = new ByteArrayInputStream(INPUT.getBytes("US-ASCII"));  
[*]            ByteArrayOutputStream out = new ByteArrayOutputStream();  
[*]              
[*]            tee = new TeeInputStream(in, out, true);  
[*]            tee.read(new byte);  
[*]  
[*]            System.out.println("Output stream: " + out.toString());           
[*]        } catch (IOException e) {  
[*]            e.printStackTrace();  
[*]        } finally {  
[*]            try { xmlReader.close(); }  
[*]            catch (IOException e) { e.printStackTrace(); }  
[*]              
[*]            try { tee.close(); }  
[*]            catch (IOException e) { e.printStackTrace(); }  
[*]        }  
[*]    }  
[*]}  

  

输出: 
  
Java代码  


[*]Input example...  
[*]XML encoding: UTF-8  
[*]Output stream: This should go to the output.  

  
   tee = new TeeInputStream(in, out, true); 
   中,分别三个参数,将输入流的内容输出到输出流,true参数为最后关闭流 
六 output工具类包 
  
  其中的org.apache.commons.io.output 是实现了outputstream,其中好特别的是 
TeeOutputStream能将一个输入流分别输出到两个输出流 
  
Java代码  


[*]import java.io.ByteArrayInputStream;  
[*]import java.io.ByteArrayOutputStream;  
[*]import java.io.IOException;  
[*]  
[*]import org.apache.commons.io.input.TeeInputStream;  
[*]import org.apache.commons.io.output.TeeOutputStream;  
[*]  
[*]public final class OutputExample {  
[*]      
[*]    private static final String INPUT = "This should go to the output.";  
[*]  
[*]    public static void runExample() {  
[*]        System.out.println("Output example...");  
[*]        TeeInputStream teeIn = null;  
[*]        TeeOutputStream teeOut = null;  
[*]          
[*]        try {  
[*]              
[*]            // TeeOutputStream  
[*]              
[*]            ByteArrayInputStream in = new ByteArrayInputStream(INPUT.getBytes("US-ASCII"));  
[*]            ByteArrayOutputStream out1 = new ByteArrayOutputStream();  
[*]            ByteArrayOutputStream out2 = new ByteArrayOutputStream();  
[*]              
[*]            teeOut = new TeeOutputStream(out1, out2);  
[*]            teeIn = new TeeInputStream(in, teeOut, true);  
[*]            teeIn.read(new byte);  
[*]  
[*]            System.out.println("Output stream 1: " + out1.toString());  
[*]            System.out.println("Output stream 2: " + out2.toString());  
[*]              
[*]        } catch (IOException e) {  
[*]            e.printStackTrace();  
[*]        } finally {  
[*]            // No need to close teeOut. When teeIn closes, it will also close its  
[*]            // Output stream (which is teeOut), which will in turn close the 2  
[*]            // branches (out1, out2).  
[*]            try { teeIn.close(); }  
[*]            catch (IOException e) { e.printStackTrace(); }  
[*]        }  
[*]    }  
[*]}  

  

  输出: 
Java代码  


[*]Output example...  
[*]Output stream 1: This should go to the output.  
[*]Output stream 2: This should go to the output.  

  

完整代码下载:http://a3ab771892fd198a96736e50.javacodegeeks.netdna-cdn.com/wp-content/uploads/2014/10/ApacheCommonsIOExample.rar
页: [1]
查看完整版本: apache common io包基本使用(包括文件的监听,过来,比较等)