目录

Commons IO - 快速指南

Apache Commons IO - Overview

Apache Commons IO库为File IO的常见操作提供了各种实用程序类,涵盖了广泛的用例。 它有助于避免编写样板代码。 Apache Commons IO库提供以下类别的类 -

  • Utility classes - org.apache.commons.io包下的这些类提供文件和字符串比较。 以下是一些例子。

    • IOUtils - 提供用于读取,写入和复制文件的实用程序方法。 这些方法适用于InputStream,OutputStream,Reader和Writer。

    • FilenameUtils - 提供在不使用文件对象的情况下处理文件名的方法。 它以类似的方式在不同的操作系统上运行。

    • FileUtils - 提供操作文件的方法,如移动,打开,检查存在,读取文件等。这些方法使用文件对象。

    • IOCase - 提供字符串操作和比较的方法。

    • FileSystemUtils - 提供获取磁盘驱动器上的可用空间的方法。

    • LineIterator - 提供使用基于行的文件的灵活方式。

  • Filter classes - org.apache.commons.io.filefilter包下的过滤器类提供了基于逻辑标准而不是基于字符串的繁琐比较来过滤文件的方法。 以下是一些例子。

    • NameFileFilter - 过滤名称的文件名。

    • WildcardFileFilter - 使用提供的通配符过滤文件。

    • SuffixFileFilter - 根据后缀过滤文件。 这用于检索特定类型的所有文件。

    • PrefixFileFilter - 根据前缀过滤文件。

    • OrFileFilter - 跨文件筛选器列表提供条件OR逻辑。 如果列表中的任何过滤器返回true,则返回true。 否则,它返回false。

    • AndFileFilter - 跨文件过滤器列表提供条件和逻辑。 如果列表中的任何过滤器返回false,则返回false。 否则,它返回true。

  • File Monitor classes - org.apache.commons.io.monitor包下的文件监视器类提供控制以跟踪特定文件或文件夹中的更改,并允许相应地对更改执行操作。 以下是一些例子。

    • FileEntry - 提供文件或目录的状态,某个时间点的文件属性。

    • FileAlterationObserver - 表示根目录下的文件状态,检查文件系统并通知侦听器创建,更改或删除事件。

    • FileAlterationMonitor - 表示生成监视线程的线程,该线程以指定的时间间隔触发任何已注册的FileAlterationObserver。

  • Comparator classes - org.apache.commons.io.comparator包下的文件监视器类允许轻松地比较和排序文件和目录。

    • NameFileComparator - 比较两个文件的名称。

    • SizeFileComparator - 比较两个文件的大小。

    • LastModifiedFileComparator - 比较两个文件的最后修改日期。

  • Stream classes - 在org.apache.commons.io.input包下有多个InputStream实现,在org.apache.commons.io.input包下有OutputStream,可以在流上执行有用的任务。 以下是一些例子。

    • NullOutputStream - 吸收随任何错误发送的所有数据。

    • TeeOutputStream - 将输出发送到两个流。

    • ByteArrayOutputStream - 更快的JDK类版本。

    • CountingOutputStream - 计算通过流传递的字节数。

    • CountingOutputStream - 计算通过流传递的字节数。

    • ProxyOutputStream - 更改对代理流的调用。

    • LockableFileWriter - 用于创建锁定文件并允许简单的跨线程文件锁定处理的FileWriter。

Apache Commons IO - Environment Setup

本地环境设置 (Local Environment Setup)

如果您仍然愿意为Java编程语言设置环境,那么本节将指导您如何在计算机上下载和设置Java。 请按照下面提到的步骤设置环境。

Java SE可从链接Download Java免费获得。 因此,您下载基于您的操作系统的版本。

按照说明下载Java并运行.exe以在您的计算机上安装Java。 在计算机上安装Java后,需要设置环境变量以指向正确的安装目录 -

设置Windows 2000/XP的路径

我们假设您已在c:\Program Files\java\jdk目录中安装了Java -

  • 右键单击“我的电脑”,然后选择“属性”。

  • 单击“高级”选项卡下的“环境变量”按钮。

  • 现在,更改'Path'变量,使其也包含Java可执行文件的路径。 例如,如果路径当前设置为“C:\WINDOWS\SYSTEM32”,则将路径更改为“C:\WINDOWS\SYSTEM32; c:\Program Files\java\jdk\bin”。

设置Windows 95/98/ME的路径

我们假设您已在c:\Program Files\java\jdk目录中安装了Java -

  • 编辑'C:\autoexec.bat'文件并在末尾添加以下行 - 'SET PATH =%PATH%; C:\Program Files\java\jdk\bin'

设置Linux,UNIX,Solaris,FreeBSD的路径

应将环境变量PATH设置为指向已安装Java二进制文件的位置。 如果您在执行此操作时遇到问题,请参阅您的shell文档。

例如,如果你使用bash作为shell,那么你可以将以下行添加到'.bashrc的末尾:export PATH =/path/to/java:$ PATH'

流行的Java编辑器 (Popular Java Editors)

要编写Java程序,需要一个文本编辑器。 市场上有许多复杂的IDE。 但就目前而言,您可以考虑以下其中一项 -

  • Notepad - 在Windows机器上,您可以使用任何简单的文本编辑器,如记事本(本教程推荐),TextPad。

  • Netbeans - 它是一个开源和免费的Java IDE,可以从https://www.netbeans.org/index.html下载。

  • Eclipse - 它也是由eclipse开源社区开发的Java IDE,可以从https://www.eclipse.org/下载。

下载Common IO Archive

从commons-io-2.6-bin.zip下载最新版本的Apache Common IO jar文件。 在编写本教程时,我们已经下载了commons-io-2.6-bin.zip并将其复制到C:\“Apache文件夹中。

OS 存档名称
Windowscommons-io-2.6-bin.zip
Linuxcommons-io-2.6-bin.tar.gz
Maccommons-io-2.6-bin.tar.gz

设置Apache Common IO Environment

APACHE_HOME环境变量设置为指向Apache jar存储在计算机上的基本目录位置。 假设我们在各种操作系统的Ap​​ache文件夹中提取了commons-io-2.6-bin.zip,如下所示。

OS output
Windows 将环境变量APACHE_HOME设置为C:\Apache
Linux export APACHE_HOME =/usr/local/Apache
Mac export APACHE_HOME =/Library/Apache

设置类路径变量 (Set CLASSPATH Variable)

CLASSPATH环境变量设置为指向Common IO jar位置。 假设您已将commons-io-2.6-bin.zip存储在各种操作系统的Ap​​ache文件夹中,如下所示。

OS output
Windows 将环境变量CLASSPATH设置为%CLASSPATH%;%APACHE_HOME%\ commons-io-2.6.jar;。;
Linux export CLASSPATH = $ CLASSPATH:$ APACHE_HOME/commons-io-2.6.jar:。
Mac export CLASSPATH = $ CLASSPATH:$ APACHE_HOME/commons-io-2.6.jar:。

Apache Commons IO - IOUtils

提供用于读取,写入和复制文件的实用方法。 这些方法适用于InputStream,OutputStream,Reader和Writer。

Class 声明 (Class Declaration)

以下是org.apache.commons.io.IOUtils类的声明 -

public class IOUtils
   extends Object

特点 (Features)

  • 为输入/输出操作提供静态实用程序方法。
  • toXXX() - 从流中读取数据。
  • write() - 将数据写入流。
  • copy() - 将所有数据复制到另一个流的流。
  • contentEquals - 比较两个流的内容。

IOUtils类的示例

这是我们需要解析的输入文件 -

Welcome to IoWiki. Simply Easy Learning.

IOTester.java

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.commons.io.IOUtils;
public class IOTester {
   public static void main(String[] args) {
      try {
         //Using BufferedReader
         readUsingTraditionalWay();
         //Using IOUtils
         readUsingIOUtils();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   //reading a file using buffered reader line by line
   public static void readUsingTraditionalWay() throws IOException {
      try(BufferedReader bufferReader 
         = new BufferedReader( new InputStreamReader(  
            new FileInputStream("input.txt") ) )) {
         String line;
         while( ( line = bufferReader.readLine() ) != null ) {
            System.out.println( line );
         }
      }
   }
   //reading a file using IOUtils in one go
   public static void readUsingIOUtils() throws IOException {
      try(InputStream in = new FileInputStream("input.txt")) {
         System.out.println( IOUtils.toString( in , "UTF-8") );
      }
   }
}

输出 (Output)

它将打印以下结果。

Welcome to IoWiki. Simply Easy Learning.
Welcome to IoWiki. Simply Easy Learning.

Apache Commons IO - FileUtils

提供操作文件的方法,如移动,打开,检查存在,读取文件等。这些方法使用文件对象。

Class 声明 (Class Declaration)

以下是org.apache.commons.io.FileUtils类的声明 -

public class FileUtils
   extends Object

特点 (Features)

  • 写入文件的方法。
  • 从文件中读取的方法。
  • 制作包含父目录的目录的方法。
  • 复制文件和目录的方法。
  • 删除文件和目录的方法。
  • 转换为URL的方法和从URL转换的方法。
  • 通过过滤器和扩展名列出文件和目录的方法。
  • 比较文件内容的方法。
  • 提交上次更改日期的方法。
  • 计算校验和的方法。

FileUtils类的示例

这是我们需要解析的输入文件 -

Welcome to IoWiki. Simply Easy Learning.

IOTester.java

import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import org.apache.commons.io.FileUtils;
public class IOTester {
   public static void main(String[] args) {
      try {
         //Using FileUtils
         usingFileUtils();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingFileUtils() throws IOException {
      //get the file object
      File file = FileUtils.getFile("input.txt");
      //get the temp directory
      File tmpDir = FileUtils.getTempDirectory();
      System.out.println(tmpDir.getName());
      //copy file to temp directory
      FileUtils.copyFileToDirectory(file, tmpDir);
      //create a new file
      File newTempFile = FileUtils.getFile(tmpDir, file.getName());
      //get the content
      String data = FileUtils.readFileToString(newTempFile, Charset.defaultCharset());
      //print the content
      System.out.println(data);
   }
}

输出 (Output)

它将打印以下结果。

Temp
Welcome to IoWiki. Simply Easy Learning.

Apache Commons IO - FilenameUtils

提供在不使用文件对象的情况下处理文件名的方法。 它以类似的方式在不同的操作系统上运行。 这个类解决了从基于Windows的开发机器转移到基于Unix的生产机器时的问题。

Class 声明 (Class Declaration)

以下是org.apache.commons.io.FilenameUtils类的声明 -

public class FilenameUtils
   extends Object

特点 (Features)

该类定义文件名中的六个组件。 将示例位置视为C:\dev\project\file.txt 。 然后组件是 -

  • 前缀 - C:\
  • 相对路径 - 开发项目\
  • 绝对路径 - C:\dev\project\
  • 名称 - file.txt
  • 基本名称 - 文件
  • 扩展 - txt

要标识目录,请在文件名中添加分隔符。

FilenameUtils类的示例

IOTester.java

import java.io.IOException;
import org.apache.commons.io.FilenameUtils;
public class IOTester {
   public static void main(String[] args) {
      try {
         //Using FilenameUtils
         usingFilenameUtils();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingFilenameUtils() throws IOException {
      String path = "C:\\dev\\project\\file.txt";
      System.out.println("Full Path: " +FilenameUtils.getFullPath(path));
      System.out.println("Relative Path: " +FilenameUtils.getPath(path));
      System.out.println("Prefix: " +FilenameUtils.getPrefix(path));
      System.out.println("Extension: " + FilenameUtils.getExtension(path));
      System.out.println("Base: " + FilenameUtils.getBaseName(path));
      System.out.println("Name: " + FilenameUtils.getName(path));
      String filename = "C:/commons/io/../lang/project.xml";
      System.out.println("Normalized Path: " + FilenameUtils.normalize(filename));
   }
}

输出 (Output)

它将打印以下结果。

Full Path: C:\dev\project\
Relative Path: dev\project\
Prefix: C:\
Extension: txt
Base: file
Name: file.txt
Normalized Path: C:\commons\lang\project.xml

Apache Commons IO - FileSystemUtils

提供获取磁盘驱动器上的可用空间的方法。

Class 声明 (Class Declaration)

以下是org.apache.commons.io.FileSystemUtils类的声明 -

public class FileSystemUtils
   extends Object

FileSystemUtils类的示例

IOTester.java

import java.io.IOException;
import org.apache.commons.io.FileSystemUtils;
public class IOTester {
   public static void main(String[] args) {
      try {
         System.out.println("Free Space " + FileSystemUtils.freeSpaceKb("C:/") + " Bytes");
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
}

输出 (Output)

它将打印以下结果。

Free Space 61355640 kb

Apache Commons IO - IOCase

枚举IO区分大小写。 不同的操作系统对文件名的区分大小写有不同的规则。 例如,Windows对文件命名不区分大小写,而Unix区分大小写。 IOCase捕获该差异,提供枚举以控制应如何执行文件名比较。 它还提供了使用枚举来执行比较的方法。

Enum宣言

以下是org.apache.commons.io.IOCase Enum的声明 -

public enum IOCase
   extends Enum<IOCase> implements Serializable

IOCase Enum的示例

IOTester.java

import java.io.IOException;
import org.apache.commons.io.IOCase;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingIOCase();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingIOCase() throws IOException {
      String text = "Welcome to IoWiki. Simply Easy Learning.";
      String text1 = "WELCOME TO IOWIKI. SIMPLY EASY LEARNING.";
      System.out.println("Ends with Learning (case sensitive): " +
      IOCase.SENSITIVE.checkEndsWith(text1, "Learning."));
      System.out.println("Ends with Learning (case insensitive): " +
      IOCase.INSENSITIVE.checkEndsWith(text1, "Learning."));
      System.out.println("Equality Check  (case sensitive): " +
      IOCase.SENSITIVE.checkEquals(text, text1));
      System.out.println("Equality Check  (case insensitive): " +
      IOCase.INSENSITIVE.checkEquals(text, text1));
   }
}

输出 (Output)

它将打印以下结果。

Ends with Learning (case sensitive): false
Ends with Learning (case insensitive): true
Equality Check  (case sensitive): false
Equality Check  (case insensitive): true

Apache Commons IO - LineIterator

提供使用基于行的文件的灵活方式。

Class 声明 (Class Declaration)

以下是org.apache.commons.io.LineIterator类的声明 -

public class LineIterator
   extends Object implements Iterator<String>, Closeable

LineIterator类的示例

这是我们需要解析的输入文件 -

Welcome to IoWiki. Simply Easy Learning.
Learn web technologies,
prepare exams,
code online,
all at one place.

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingLineIterator();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingLineIterator() throws IOException {
      //get the file object
      File file = FileUtils.getFile("input.txt");
      try(LineIterator lineIterator = FileUtils.lineIterator(file)) {
         System.out.println("Contents of input.txt");
         while(lineIterator.hasNext()) {
            System.out.println(lineIterator.next());
         }
      }
   }
}

输出 (Output)

它将打印以下结果。

Contents of input.txt
Welcome to IoWiki. Simply Easy Learning.
Learn web technologies,
prepare exams,
code online,
all at one place.

Apache Commons IO - NameFileFilter

过滤名称的文件名。

Class 声明 (Class Declaration)

以下是org.apache.commons.io.filefilter.NameFileFilter类的声明 -

public class NameFileFilter
   extends AbstractFileFilter implements Serializable

NameFileFilter类的示例

这是我们需要解析的输入文件 -

Welcome to IoWiki. Simply Easy Learning.

让我们打印当前目录中的所有文件和目录,然后过滤名为Input.txt的文件。

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.IOCase;
import org.apache.commons.io.filefilter.NameFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingNameFileFilter();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingNameFileFilter() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      //get names of all files and directory in current directory
      String[] files = currentDirectory.list();
      System.out.println("All files and Folders.\n");
      for( int i = 0; i < files.length; i++ ) {
         System.out.println(files[i]);
      }
      System.out.println("\nFile with name input.txt\n");
      String[] acceptedNames = {"input", "input.txt"};
      String[] filesNames = currentDirectory.list( new NameFileFilter(acceptedNames, IOCase.INSENSITIVE) );
      for( int i = 0; i < filesNames.length; i++ ) {
         System.out.println(filesNames[i]);
      }
   }
}

输出 (Output)

它将打印以下结果。

All files and Folders.
.classpath
.project
.settings
bin
input.txt
src
File with name input.txt
input.txt

Apache Commons IO - WildcardFileFilter

使用提供的通配符过滤文件。

Class 声明 (Class Declaration)

以下是org.apache.commons.io.filefilter.WildcardFileFilter类的声明 -

public class WildcardFileFilter
   extends AbstractFileFilter implements Serializable

WildcardFileFilter类的示例

这是我们需要解析的输入文件 -

Welcome to IoWiki. Simply Easy Learning.

让我们打印当前目录中的所有文件和目录,然后过滤名称以t结尾的文件。

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.filefilter.WildcardFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingWildcardFileFilter();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingWildcardFileFilter() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      //get names of all files and directory in current directory
      String[] files = currentDirectory.list();
      System.out.println("All files and Folders.\n");
      for( int i = 0; i < files.length; i++ ) {
         System.out.println(files[i]);
      }
      System.out.println("\nFile name ending with t.\n");
      String[] filesNames = currentDirectory.list( new WildcardFileFilter("*t") );
      for( int i = 0; i < filesNames.length; i++ ) {
         System.out.println(filesNames[i]);
      }
   }
}

输出 (Output)

它将打印以下结果。

All files and Folders.
.classpath
.project
.settings
bin
input.txt
src
File name ending with t
.project
input.txt

Apache Commons IO - SuffixFileFilter

根据后缀过滤文件。 这用于检索特定类型的所有文件。

Class 声明 (Class Declaration)

以下是org.apache.commons.io.filefilter.SuffixFileFilter类的声明 -

public class SuffixFileFilter
   extends AbstractFileFilter implements Serializable

SuffixFileFilter类的示例

这是我们需要解析的输入文件 -

Welcome to IoWiki. Simply Easy Learning.

让我们打印当前目录中的所有文件和目录,然后过滤扩展名为txt的文件。

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.filefilter.SuffixFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingSuffixFileFilter();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingSuffixFileFilter() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      //get names of all files and directory in current directory
      String[] files = currentDirectory.list();
      System.out.println("All files and Folders.\n");
      for( int i = 0; i < files.length; i++ ) {
         System.out.println(files[i]);
      }
      System.out.println("\nFile with extenstion txt\n");
      String[] filesNames = currentDirectory.list( new SuffixFileFilter("txt") );
      for( int i = 0; i < filesNames.length; i++ ) {
         System.out.println(filesNames[i]);
      }
   }
}

输出 (Output)

它将打印以下结果。

All files and Folders.
.classpath
.project
.settings
bin
input.txt
src
File with extenstion txt
input.txt

Apache Commons IO - PrefixFileFilter

根据前缀过滤文件。

Class 声明 (Class Declaration)

以下是org.apache.commons.io.filefilter.PrefixFileFilter类的声明 -

public class PrefixFileFilter
   extends AbstractFileFilter implements Serializable

PrefixFileFilter类的示例

这是我们需要解析的输入文件 -

Welcome to IoWiki. Simply Easy Learning.

让我们打印当前目录中的所有文件和目录,然后过滤名称以input开头的文件。

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.filefilter.PrefixFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingPrefixFileFilter();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingPrefixFileFilter() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      //get names of all files and directory in current directory
      String[] files = currentDirectory.list();
      System.out.println("All files and Folders.\n");
      for( int i = 0; i < files.length; i++ ) {
         System.out.println(files[i]);
      }
      System.out.println("\nFile starting with input\n");
      String[] filesNames = currentDirectory.list( new PrefixFileFilter("input") );
      for( int i = 0; i < filesNames.length; i++ ) {
         System.out.println(filesNames[i]);
      }
   }
}

输出 (Output)

它将打印以下结果。

All files and Folders.
.classpath
.project
.settings
bin
input.txt
src
File with extenstion txt
input.txt

Apache Commons IO - OrFileFilter

跨文件筛选器列表提供条件OR逻辑。 如果列表中的任何过滤器返回true,则返回true。 否则,它返回false。

Class 声明 (Class Declaration)

以下是org.apache.commons.io.filefilter.OrFileFilter类的声明 -

public class OrFileFilter
   extends AbstractFileFilter implements ConditionalFileFilter, Serializable

OrFileFilter类的示例

这是我们需要解析的输入文件 -

Welcome to IoWiki. Simply Easy Learning.

让我们打印当前目录中的所有文件和目录,然后过滤名称以。开头的文件。 或以t结尾。

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.filefilter.OrFileFilter;
import org.apache.commons.io.filefilter.PrefixFileFilter;
import org.apache.commons.io.filefilter.WildcardFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingOrFileFilter();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingOrFileFilter() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      //get names of all files and directory in current directory
      String[] files = currentDirectory.list();
      System.out.println("All files and Folders.\n");
      for( int i = 0; i < files.length; i++ ) {
         System.out.println(files[i]);
      }
      System.out.println("\nFile starting with . or ends with t\n");
      String[] filesNames = currentDirectory.list(
         new OrFileFilter(new PrefixFileFilter("."), new WildcardFileFilter("*t")));
      for( int i = 0; i < filesNames.length; i++ ) {
         System.out.println(filesNames[i]);
      }
   }
}

输出 (Output)

它将打印以下结果。

All files and Folders.
.classpath
.project
.settings
bin
input.txt
src
File starting with . or ends with t
.classpath
.project
.settings
input.txt

Apache Commons IO - AndFileFilter

跨文件筛选器列表提供条件和逻辑。 如果列表中的所有过滤器都返回true,则返回true。 否则,它返回false。

Class 声明 (Class Declaration)

以下是org.apache.commons.io.filefilter.AndFileFilter类的声明 -

public class AndFileFilter
   extends AbstractFileFilter implements ConditionalFileFilter, Serializable

AndFileFilter类的示例

这是我们需要解析的输入文件 -

Welcome to IoWiki. Simply Easy Learning.

让我们打印当前目录中的所有文件和目录,然后过滤名称以。开头的文件。 并以t结尾。

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.filefilter.AndFileFilter;
import org.apache.commons.io.filefilter.PrefixFileFilter;
import org.apache.commons.io.filefilter.WildcardFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingAndFileFilter();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingAndFileFilter() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      //get names of all files and directory in current directory
      String[] files = currentDirectory.list();
      System.out.println("All files and Folders.\n");
      for( int i = 0; i < files.length; i++ ) {
         System.out.println(files[i]);
      }
      System.out.println("\nFile starting with . and ends with t\n");
      String[] filesNames = currentDirectory.list(
         new AndFileFilter(new PrefixFileFilter("."), new WildcardFileFilter("*t")));
      for( int i = 0; i < filesNames.length; i++ ) {
         System.out.println(filesNames[i]);
      }
   }
}

输出 (Output)

它将打印以下结果。

All files and Folders.
.classpath
.project
.settings
bin
input.txt
src
File starting with . or ends with t
.project

Apache Commons IO - FileEntry

提供文件或目录的状态,某个时间点的文件属性。

Class 声明 (Class Declaration)

以下是org.apache.commons.io.monitor.FileEntry类的声明 -

public class FileEntry
   extends Object implements Serializable

特点 (Features)

FileEntry类对象在某个时间点提供以下文件属性。

  • getName() - 文件名。
  • exists() - 检查文件是否存在。
  • isDirectory() - 检查文件是否是目录。
  • lastModified() - 给出最后修改日期时间。
  • listFiles() - 给出目录的内容。

FileEntry类的示例

这是我们需要解析的输入文件 -

Welcome to IoWiki. Simply Easy Learning.

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.monitor.FileEntry;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingFileEntry();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingFileEntry() throws IOException {
      //get the file object
      File file = FileUtils.getFile("input.txt");
      FileEntry fileEntry = new FileEntry(file);
      System.out.println("Monitored File: " + fileEntry.getFile());
      System.out.println("File name: " + fileEntry.getName());
      System.out.println("Is Directory: " + fileEntry.isDirectory());
   }
}

输出 (Output)

它将打印以下结果。

Monitored File: input.txt
File name: input.txt
Is Directory: false

Commons IO - FileAlterationObserver

表示根目录下的文件状态,检查文件系统并通知侦听器创建,更改或删除事件。

Class 声明 (Class Declaration)

以下是org.apache.commons.io.monitor.FileAlterationObserver类的声明 -

public class FileAlterationObserver
   extends Object implements Serializable

FileAlterationObserver类的示例

这是我们需要解析的输入文件 -

Welcome to IoWiki. Simply Easy Learning.

IOTester.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;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingFileAlterationObserver();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingFileAlterationObserver() throws IOException {
      //get the file object
      File inputFile = FileUtils.getFile("input.txt");
      String absolutePath = inputFile.getAbsolutePath();
      String parent = absolutePath.substring(0,absolutePath.indexOf("input.txt"));   
      File parentDirectory = FileUtils.getFile(parent);
      FileAlterationObserver observer = new FileAlterationObserver(parentDirectory);
      observer.addListener(new FileAlterationListenerAdaptor() {
         @Override
         public void onDirectoryCreate(File file) {
            System.out.println("Folder created: " + file.getName());
         }
         @Override
         public void onDirectoryDelete(File file) {
            System.out.println("Folder deleted: " + file.getName());
         } 
         @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());
         }  
      });
      //create a monitor to check changes after every 500 ms
      FileAlterationMonitor monitor = new FileAlterationMonitor(500, observer);
      try {
         monitor.start();
         //create a new directory
         File newFolder = new File("test");
         File newFile = new File("test1");
         newFolder.mkdirs();
         Thread.sleep(1000);
         newFile.createNewFile();
         Thread.sleep(1000);
         FileDeleteStrategy.NORMAL.delete(newFolder);
         Thread.sleep(1000);
         FileDeleteStrategy.NORMAL.delete(newFile);
         Thread.sleep(1000);
         monitor.stop(10000);
      } catch(IOException e) {
         System.out.println(e.getMessage());
      } catch(InterruptedException e) {
         System.out.println(e.getMessage());
      } catch (Exception e) {
         System.out.println(e.getMessage());
      }
   }
}

输出 (Output)

它将打印以下结果。

Folder created: test
File created: test1
Folder deleted: test
File deleted: test1

Apache Commons IO - FileAlterationMonitor

表示生成监视线程的线程,该线程以指定的时间间隔触发任何已注册的FileAlterationObserver。

Class 声明 (Class Declaration)

以下是org.apache.commons.io.monitor.FileAlterationMonitor类的声明 -

public final class FileAlterationMonitor
   extends Object implements Runnable

FileAlterationMonitor类的示例

这是我们需要解析的输入文件 -

Welcome to IoWiki. Simply Easy Learning.

IOTester.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;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingFileAlterationMonitor();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingFileAlterationMonitor() throws IOException {
      //get the file object
      File inputFile = FileUtils.getFile("input.txt");
      String absolutePath = inputFile.getAbsolutePath();
      String parent = absolutePath.substring(0,absolutePath.indexOf("input.txt"));   
      File parentDirectory = FileUtils.getFile(parent);
      FileAlterationObserver observer = new FileAlterationObserver(parentDirectory);
      observer.addListener(new FileAlterationListenerAdaptor(){
         @Override
         public void onDirectoryCreate(File file) {
            System.out.println("Folder created: " + file.getName());
         }
         @Override
         public void onDirectoryDelete(File file) {
            System.out.println("Folder deleted: " + file.getName());
         } 
         @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());
         }  
      });
      //create a monitor to check changes after every 500 ms
      FileAlterationMonitor monitor = new FileAlterationMonitor(500, observer);
      try {
         monitor.start();
         //create a new directory
         File newFolder = new File("test");
         File newFile = new File("test1");
         newFolder.mkdirs();
         Thread.sleep(1000);
         newFile.createNewFile();
         Thread.sleep(1000);
         FileDeleteStrategy.NORMAL.delete(newFolder);
         Thread.sleep(1000);
         FileDeleteStrategy.NORMAL.delete(newFile);
         Thread.sleep(1000);
         monitor.stop(10000);
      } catch(IOException e) {
         System.out.println(e.getMessage());
      } catch(InterruptedException e) {
         System.out.println(e.getMessage());
      } catch (Exception e) {
         System.out.println(e.getMessage());
      }
   }
}

输出 (Output)

它将打印以下结果。

Folder created: test
File created: test1
Folder deleted: test
File deleted: test1

Apache Commons IO - NameFileComparator

比较两个文件的名称。 NameFileComparator可用于以区分大小写,不区分大小写或依赖于系统的区分大小写的方式使用其名称对文件列表或数组进行排序。

Class 声明 (Class Declaration)

以下是org.apache.commons.io.comparator.NameFileComparator类的声明 -

public class NameFileComparator
   extends Object implements Serializable

NameFileComparator类的示例

这是我们需要解析的输入文件 -

Welcome to IoWiki. Simply Easy Learning.

IOTester.java

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import org.apache.commons.io.IOCase;
import org.apache.commons.io.comparator.NameFileComparator;
import org.apache.commons.io.filefilter.FileFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingNameFileComparator();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingNameFileComparator() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      NameFileComparator comparator = new NameFileComparator(IOCase.INSENSITIVE);
      File[] sortedFiles = comparator.sort(currentDirectory.listFiles((FileFilter)FileFileFilter.FILE));
      System.out.println("Sorted By Name: ");
      for(File file:sortedFiles) {      
         System.out.println(file.getName());
      }
   }
}

输出 (Output)

它将打印以下结果。

Sorted By Name: 
.classpath
.project
input.txt

Apache Commons IO - SizeFileComparator

比较两个文件/目录的大小。 SizeFileComparator可用于根据文件的大小或目录对文件列表或数组进行排序。 孩子的。

Class 声明 (Class Declaration)

以下是org.apache.commons.io.comparator.SizeFileComparator类的声明 -

public class SizeFileComparator
   extends Object implements Serializable

SizeFileComparator类的示例

这是我们需要解析的输入文件 -

Welcome to IoWiki. Simply Easy Learning.

IOTester.java

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import org.apache.commons.io.comparator.SizeFileComparator;
import org.apache.commons.io.filefilter.FileFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingSizeFileComparator();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingSizeFileComparator() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      SizeFileComparator comparator = new SizeFileComparator();
      File[] sortedFiles = 
         comparator.sort(currentDirectory.listFiles((FileFilter)FileFileFilter.FILE));
      System.out.println("Sorted By Size: ");
      for(File file:sortedFiles) {      
         System.out.println(file.getName() + ", size(kb) :" + file.length());
      }
   }
}

输出 (Output)

它将打印以下结果。

Sorted By Size: 
input.txt, size:124
.project, size:382
.classpath, size:441

Commons IO - LastModifiedFileComparator

比较两个文件/目录的最后修改日期。 LastModifiedFileComparator可用于使用上次修改日期对文件/目录的列表或数组进行排序。

Class 声明 (Class Declaration)

以下是org.apache.commons.io.comparator.LastModifiedFileComparator类的声明 -

public class LastModifiedFileComparator
   extends Object implements Serializable

LastModifiedFileComparator类的示例

这是我们需要解析的输入文件 -

Welcome to IoWiki. Simply Easy Learning.

IOTester.java

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.Date;
import org.apache.commons.io.comparator.LastModifiedFileComparator;
import org.apache.commons.io.filefilter.FileFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingLastModifiedFileComparator();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingLastModifiedFileComparator() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      LastModifiedFileComparator comparator = new LastModifiedFileComparator();
      File[] sortedFiles = comparator.sort(currentDirectory.listFiles((FileFilter)FileFileFilter.FILE));
      System.out.println("Sorted By Last Modified date: ");
      for(File file:sortedFiles) {      
         System.out.println(file.getName() + ", Modified on: " + new Date(file.lastModified()));
      }
   }
}

输出 (Output)

它将打印以下结果。

Sorted By Last Modified date: 
.project, Modified on: Thu Oct 12 19:06:45 IST 2017
.classpath, Modified on: Mon Nov 20 13:09:55 IST 2017
input.txt, Modified on: Mon Nov 20 19:27:55 IST 2017

Apache Commons IO - TeeInputStream

它是一个InputStream代理,它透明地将从代理流中读取的所有字节的副本写入给定的OutputStream。 调用此代理上的close()方法时,将关闭代理输入流。 它可以用于一次集体操作两个流。

Class 声明 (Class Declaration)

以下是org.apache.commons.io.input.TeeInputStream类的声明 -

public class TeeInputStream
   extends ProxyInputStream

TeeInputStream类的示例

在此示例中,关闭TeeInputStream会关闭TeeInputStream以及TeeOutputStream对象。

IOTester.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 class IOTester {
   private static final String SAMPLE = "Welcome to IoWiki. Simply Easy Learning.";
   public static void main(String[] args) {
      try {
         usingTeeInputStream();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingTeeInputStream() throws IOException {
      TeeInputStream teeInputStream = null;
      TeeOutputStream teeOutputStream = null;
      try {
         ByteArrayInputStream inputStream = new ByteArrayInputStream(SAMPLE.getBytes("US-ASCII"));
         ByteArrayOutputStream outputStream1 = new ByteArrayOutputStream();
         ByteArrayOutputStream outputStream2 = new ByteArrayOutputStream();
         teeOutputStream = new TeeOutputStream(outputStream1, outputStream2);
         teeInputStream = new TeeInputStream(inputStream, teeOutputStream, true);
         teeInputStream.read(new byte[SAMPLE.length()]);
         System.out.println("Output stream 1: " + outputStream1.toString());
         System.out.println("Output stream 2: " + outputStream2.toString());
      } catch (IOException e) {
         System.out.println(e.getMessage());
      } finally {
         //teeIn.close() closes teeIn and teeOut which in turn closes the out1 and out2.       
         try { 
            teeInputStream.close(); 
         } catch (IOException e) { 
            System.out.println(e.getMessage());
         }
      }
   }
}

输出 (Output)

它将打印以下结果。

Output stream 1: Welcome to IoWiki. Simply Easy Learning.
Output stream 2: Welcome to IoWiki. Simply Easy Learning.

Apache Commons IO - TeeOutputStream

TeeOutputStream拆分OutputStream。 它以unix'tee'命令命名。 它允许流分支为两个流。

Class 声明 (Class Declaration)

以下是org.apache.commons.io.output.TeeOutputStream类的声明 -

public class TeeOutputStream
   extends ProxyOutputStream

TeeOutputStream类的示例

在此示例中,TeeOutputStream接受两个输出流作为参数,并将数据传递给TeeOutputStream设置数据到两个输出流。

IOTester.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 class IOTester {
   private static final String SAMPLE = "Welcome to IoWiki. Simply Easy Learning.";
   public static void main(String[] args) {
      try {
         usingTeeInputStream();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingTeeInputStream() throws IOException {
      TeeInputStream teeInputStream = null;
      TeeOutputStream teeOutputStream = null;
      try {
         ByteArrayInputStream inputStream = new ByteArrayInputStream(SAMPLE.getBytes("US-ASCII"));
         ByteArrayOutputStream outputStream1 = new ByteArrayOutputStream();
         ByteArrayOutputStream outputStream2 = new ByteArrayOutputStream();
         teeOutputStream = new TeeOutputStream(outputStream1, outputStream2);
         teeInputStream = new TeeInputStream(inputStream, teeOutputStream, true);
         teeInputStream.read(new byte[SAMPLE.length()]);
         System.out.println("Output stream 1: " + outputStream1.toString());
         System.out.println("Output stream 2: " + outputStream2.toString());
      } catch (IOException e) {
         System.out.println(e.getMessage());
      } finally {
         //teeIn.close() closes teeIn and teeOut which in turn closes the out1 and out2.       
         try { 
            teeInputStream.close(); 
         } catch (IOException e) { 
            System.out.println(e.getMessage());
         }
      }
   }
}

输出 (Output)

它将打印以下结果。

Output stream 1: Welcome to IoWiki. Simply Easy Learning.
Output stream 2: Welcome to IoWiki. Simply Easy Learning.
↑回到顶部↑
WIKI教程 @2018