Commons Io 简明教程
Apache Commons IO - Overview
Apache Commons IO 库为文件的常见操作提供了各种实用类,涵盖了广泛的用例。它有助于避免编写样板代码。Apache Commons IO 库提供了以下类别的类:
-
Utility classes − org.apache.commons.io 包下的这些类提供文件和字符串比较。以下是一些示例。 IOUtils − 提供用于读取、写入和复制文件的实用方法。这些方法与 InputStream、OutputStream、Reader 和 Writer 协同工作。 FilenameUtils − 提供无需使用文件对象即可处理文件名的方法。它以相同的方式适用于不同的操作系统。 FileUtils − 提供用于操作文件的方法,例如移动、打开、检查是否存在、读取文件等。这些方法使用 File 对象。 IOCase − 提供字符串操作和比较的方法。 FileSystemUtils − 提供获取磁盘驱动器上可用空间的方法。 LineIterator − 提供处理基于行的文件的一种灵活方法。
-
Filter classes − org.apache.commons.io.filefilter 包下的 Filter 类提供基于逻辑条件(而非基于字符串的繁琐比较)过滤文件的方法。以下是一些示例。 NameFileFilter − 按名称过滤文件名。 WildcardFileFilter − 使用提供的通配符过滤文件。 SuffixFileFilter − 按后缀过滤文件。这用于检索特定类型的所有文件。 PrefixFileFilter − 按前缀过滤文件。 OrFileFilter − 在一组文件过滤器上提供条件 OR 逻辑。如果列表中的任何过滤器返回 true,则返回 true。否则,它返回 false。 AndFileFilter − 在一组文件过滤器上提供条件 And 逻辑。如果列表中的任何过滤器返回 false,则返回 false。否则,它返回 true。
-
File Monitor classes − org.apache.commons.io.monitor 包下的文件监视器类提供对特定文件或文件夹中的更改进行跟踪的控件,并允许相应地对更改执行操作。以下是一些示例。
-
Comparator classes − org.apache.commons.io.comparator 包下的文件监视器类允许轻松地比较和排序文件和目录。 NameFileComparator − 比较两个文件的名称。 SizeFileComparator − 比较两个文件的 size。 LastModifiedFileComparator − 比较两个文件的上次修改日期。
-
Stream classes − 存在多个 org.apache.commons.io.input 包下的 InputStream 实现和 org.apache.commons.io.output 包下的 OutputStream 实现,用于在流上执行有用的任务。以下是一些示例。 NullOutputStream − 吸收发送的所有错误数据。 TeeOutputStream − 将输出发送到两个流。 ByteArrayOutputStream − JDK 类的更快速版本。 CountingOutputStream − 统计通过流传递的字节数。 CountingOutputStream − 统计通过流传递的字节数。 ProxyOutputStream − 更改对代理流的调用。 LockableFileWriter − 创建锁定文件并允许进行简单的跨线程文件锁定处理的 FileWriter。
Apache Commons IO - Environment Setup
在本章中,我们将了解 Apache Commons IO 的本地环境设置以及如何设置 Windows 2000/XP、Windows 95/98/ME 等的 Commons IO 路径。我们还将了解一些流行的 Java 编辑器以及如何下载 Commons IO 存档。
Verify your Java Installation
首先,你的系统中需要安装 Java 软件开发工具包 (SDK)。要验证这一点,请根据所使用的平台执行以下两个命令。
如果 Java 安装已正确完成,则它将显示 Java 安装的当前版本和规范。以下表中给出了一个示例输出。
Platform |
Command |
Sample Output |
Windows |
打开命令控制台并键入 >java -version |
java version "11.0.11" 2021-04-20 LTSJava™ SE Runtime Environment 18.9 (build 11.0.11+9-LTS-194)Java HotSpot™ 64-Bit Server VM 18.9 (build 11.0.11+9-LTS-194, mixed mode) |
Linux |
打开命令终端并键入 $java -version |
java version "11.0.11" 2021-04-20 LTSOpen JDK Runtime Environment 18.9 (build 11.0.11+9-LTS-194)Open JDK 64-Bit Server VM (build 11.0.11+9-LTS-194, mixed mode) |
-
我们假设本教程的读者已在他们的系统中安装了 Java SDK 版本 11.0.11。
-
如果您没有 Java SDK,请从 www.oracle.com/technetwork/java/javase/downloads/index.html 下载其当前版本并将其安装。
Set your Java Environment
设置环境变量 JAVA_HOME 以指向计算机上安装 Java 的基本目录位置。例如,
Sr.No. |
Platform & Description |
1 |
Windows Set JAVA_HOME to C:\ProgramFiles\java\jdk11.0.11 |
2 |
Linux Export JAVA_HOME = /usr/local/java-current |
将 Java 编译器位置的完整路径附加到系统路径。
Sr.No. |
Platform & Description |
1 |
Windows 将字符串“C:\Program Files\Java\jdk11.0.11\bin”附加到系统变量 PATH 的末尾。 |
2 |
Linux Export PATH = $PATH:$JAVA_HOME/bin/ |
如上所述,从命令提示符执行命令 java -version 。
Popular Java Editors
要编写 Java 程序,您需要一个文本编辑器。市场上有许多复杂的集成开发环境 (IDE)。但是现在,您可以考虑以下项之一:
-
Notepad − 在 Windows 计算机上,您可以使用任何简单的文本编辑器,例如记事本(推荐用于本教程)、TextPad。
-
Netbeans − 它是一个开源免费的 Java IDE,可以从 www.netbeans.org/index.html 下载。
-
Eclipse − 它也是一个由 eclipse 开源社区开发的 Java 集成开发环境,可以从 www.eclipse.org 下载。
Download Common IO Archive
从 commons-io-2.11.0-bin.zip 下载 Apache Common IO jar 文件的最新版本。在编写本教程时,我们已经下载了 commons-io-2.11.0-bin.zip 并将其复制到 C:\>Apache 文件夹中。
OS |
Archive name |
Windows |
commons-io-2.11.0-bin.zip |
Linux |
commons-io-2.11.0-bin.tar.gz |
Mac |
commons-io-2.11.0-bin.tar.gz |
Set Apache Common IO Environment
设置 APACHE_HOME 环境变量以指向机器上存储 Apache jar 的基本目录位置。假设我们在各种操作系统中将 commons-io-2.11.0-bin.zip 提取到 Apache 文件夹中,如下所示。
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.11.0-bin.zip 存储在各种操作系统的 Apache 文件夹中,如下所示。
OS |
Output |
Windows |
设置环境变量 CLASSPATH 为 %CLASSPATH%;%APACHE_HOME%\commons-io-2.11.0.jar;。 |
Linux |
export CLASSPATH=$CLASSPATH:$APACHE_HOME/commons-io-2.11.0.jar:. |
Mac |
export CLASSPATH=$CLASSPATH:$APACHE_HOME/commons-io-2.11.0.jar:. |
Apache Commons IO - IOUtils Class
提供用于读取、写入和复制文件的实用方法。这些方法与 InputStream、OutputStream、Reader 和 Writer 协同工作。
Features
-
提供用于输入/输出操作的静态实用程序方法。
-
toXXX() - 从流读取数据。
-
write() - 将数据写入流。
-
copy() - 将所有数据从一个流复制到另一个流。
-
contentEquals - 比较两个流的内容。
Example of IOUtils Class
以下是我们需要解析的输入文件 -
Welcome to TutorialsPoint. 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") );
}
}
}
Apache Commons IO - FileUtils Class
提供操作文件的方法,例如移动、打开、检查是否存在、读取文件等。这些方法使用 File Object。
Features
-
写入文件的方法。
-
从文件读取的方法。
-
生成目录(包括父目录)的方法。
-
复制文件和目录的方法。
-
删除文件和目录的方法。
-
转换为 URL 和从 URL 转换的方法。
-
按过滤器和扩展名列出文件和目录的方法。
-
比较文件内容的方法。
-
获取文件上次更改日期的方法。
-
计算校验和的方法。
Example of FileUtils Class
以下是我们需要解析的输入文件 -
Welcome to TutorialsPoint. 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);
}
}
Apache Commons IO - FilenameUtils Class
提供一种方法来使用文件名而不使用 File Object 来工作。它以类似的方式在不同的操作系统上工作。此类解决从基于 Windows 的开发机器移至基于 Unix 的生产机器时的问题。
Class Declaration
以下是 org.apache.commons.io.FilenameUtils 类的声明 -
public class FilenameUtils
extends Object
Features
此类在文件名中定义了六个组件。考虑一个示例位置 C:\dev\project\file.txt 。然后组件是:
-
Prefix - C:\
-
Relative Path - dev\project\
-
Absolute path - C:\dev\project\
-
Name - file.txt
-
Base name - file
-
Extension - txt
要识别目录,请向文件名添加分隔符。
Example of FilenameUtils Class
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));
}
}
Apache Commons IO - FileSystemUtils Class
提供方法以获取磁盘驱动器上的可用空间。
Class Declaration
以下是 org.apache.commons.io.FileSystemUtils 类的声明 -
public class FileSystemUtils
extends Object
Example of FileSystemUtils Class
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());
}
}
}
Apache Commons IO - IOCase Enum
IO 大小写敏感性枚举。不同的操作系统对文件名的区分大小写有不同的规则。例如,Windows 对文件命名不区分大小写,而 Unix 则区分大小写。IOCase 捕捉到这种差异,提供了可控制如何执行文件名比较的枚举。它还提供使用枚举执行比较的方法。
Enum Declaration
以下是 org.apache.commons.io.IOCase 枚举的声明 -
public enum IOCase
extends Enum<IOCase>
implements Serializable
Example of 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 TutorialsPoint. Simply Easy Learning.";
String text1 = "WELCOME TO TUTORIALSPOINT. 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));
}
}
Apache Commons IO - LineIterator Class
提供了一种使用基于行的文件的方法。
Class Declaration
以下是 org.apache.commons.io.LineIterator 类的声明 -
public class LineIterator
extends Object
implements Iterator<String>, Closeable
Example of LineIterator Class
以下是我们需要解析的输入文件 -
Welcome to TutorialsPoint. 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());
}
}
}
}
Apache Commons IO - NameFileFilter Class
按名称筛选文件名。
Class Declaration
以下是 org.apache.commons.io.filefilter.NameFileFilter 类的声明 -
public class NameFileFilter
extends AbstractFileFilter
implements Serializable
Example of NameFileFilter Class
以下是我们需要解析的输入文件 -
Welcome to TutorialsPoint. 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]);
}
}
}
Apache Commons IO - WildcardFileFilter Class
使用提供的通配符筛选文件。
Class Declaration
以下是 org.apache.commons.io.filefilter.WildcardFileFilter 类的声明 -
public class WildcardFileFilter
extends AbstractFileFilter
implements Serializable
Example of WildcardFileFilter Class
以下是我们需要解析的输入文件 -
Welcome to TutorialsPoint. 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]);
}
}
}
Apache Commons IO - SuffixFileFilter Class
根据后缀筛选文件。这用于检索特定类型的所有文件。
Class Declaration
以下是 org.apache.commons.io.filefilter.SuffixFileFilter 类的声明 -
public class SuffixFileFilter
extends AbstractFileFilter
implements Serializable
Example of SuffixFileFilter Class
以下是我们需要解析的输入文件 -
Welcome to TutorialsPoint. 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]);
}
}
}
Apache Commons IO - PrefixFileFilter Class
根据前缀筛选文件。
Class Declaration
以下是 org.apache.commons.io.filefilter.PrefixFileFilter 类的声明 -
public class PrefixFileFilter
extends AbstractFileFilter
implements Serializable
Example of PrefixFileFilter Class
以下是我们需要解析的输入文件 -
Welcome to TutorialsPoint. Simply Easy Learning.
让我们打印当前目录中的所有文件和目录, 然后使用以输入开头的名称过滤一个文件。
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]);
}
}
}
Apache Commons IO - OrFileFilter Class
提供跨文件筛选器列表的条件 OR 逻辑。如果列表中的任何过滤器返回 true, 则返回 true。否则, 它返回 false。
Class Declaration
以下是 org.apache.commons.io.filefilter.OrFileFilter 类声明 -
public class OrFileFilter
extends AbstractFileFilter
implements ConditionalFileFilter, Serializable
Example of OrFileFilter Class
以下是我们需要解析的输入文件 -
Welcome to TutorialsPoint. 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]);
}
}
}
Apache Commons IO - AndFileFilter Class
提供跨文件筛选器列表的条件 AND 逻辑。如果列表中的所有过滤器返回 true, 则返回 true。否则, 它返回 false。
Class Declaration
以下是 org.apache.commons.io.filefilter.AndFileFilter 类声明 -
public class AndFileFilter
extends AbstractFileFilter
implements ConditionalFileFilter, Serializable
Example of AndFileFilter Class
以下是我们需要解析的输入文件 -
Welcome to TutorialsPoint. 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]);
}
}
}
Apache Commons IO - FileEntry Class
提供文件或目录的状态, 即一个时间点的文件属性。
Class Declaration
以下是对 org.apache.commons.io.monitor.FileEntry 类的声明 -
public class FileEntry
extends Object
implements Serializable
Features
FileEntry 类对象在时间点提供以下文件属性。
-
getName() - file name.
-
exists() - 检查文件是否存在。
-
isDirectory() - 检查文件是否为目录。
-
lastModified() - 给出最后修改日期时间。
-
listFiles() - 给出目录的内容。
Example of FileEntry Class
以下是我们需要解析的输入文件 -
Welcome to TutorialsPoint. 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());
}
}
Apache Commons IO - FileAlterationObserver Class
表示根目录下文件的状态, 检查文件系统, 并通知监听器创建、更改或删除事件。
Class Declaration
以下是 org.apache.commons.io.monitor.FileAlterationObserver 类声明 -
public class FileAlterationObserver
extends Object
implements Serializable
Example of FileAlterationObserver Class
以下是我们需要解析的输入文件 -
Welcome to TutorialsPoint. 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());
}
}
}
Apache Commons IO - FileAlterationMonitor Class
Representa 一条线程, 它生成一个监视线程, 定期触发任何注册的 FileAlterationObserver。
Class Declaration
以下是 org.apache.commons.io.monitor.FileAlterationMonitor 类声明 -
public final class FileAlterationMonitor
extends Object
implements Runnable
Example of FileAlterationMonitor Class
以下是我们需要解析的输入文件 -
Welcome to TutorialsPoint. 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());
}
}
}
Apache Commons IO - NameFileComparator Class
比较两个文件的名称。NameFileComparator 可用于使用文件名称按大小写敏感、不敏感或系统相关的大小写敏感的方式对文件列表或数组进行排序。
Class Declaration
下面是 org.apache.commons.io.comparator.NameFileComparator 类的声明 -
public class NameFileComparator
extends Object
implements Serializable
Example of NameFileComparator Class
以下是我们需要解析的输入文件 -
Welcome to TutorialsPoint. 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());
}
}
}
Apache Commons IO - SizeFileComparator Class
比较两个文件/目录的大小。SizeFileComparator 可用于对文件列表或数组(按照其大小)或目录(按照其子项)进行排序。
Class Declaration
下面是 org.apache.commons.io.comparator.SizeFileComparator 类的声明 -
public class SizeFileComparator
extends Object
implements Serializable
Example of SizeFileComparator Class
以下是我们需要解析的输入文件 -
Welcome to TutorialsPoint. 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());
}
}
}
Apache Commons IO - LastModifiedFileComparator Class
比较两个文件/目录的最后修改日期。LastModifiedFileComparator 可用于对文件/目录列表或数组(按照其最后的修改日期)进行排序。
Class Declaration
下面是 org.apache.commons.io.comparator.LastModifiedFileComparator 类的声明 -
public class LastModifiedFileComparator
extends Object
implements Serializable
Example of LastModifiedFileComparator Class
以下是我们需要解析的输入文件 -
Welcome to TutorialsPoint. 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()));
}
}
}
Apache Commons IO - TeeInputStream Class
它是一个 InputStream 代理,会透明地将所有从代理流读取的字节副本写入给定的 OutputStream。当在此代理上调用 close() 方法时,受代理的输入流便会关闭。它可用于操作一次两个流。
Class Declaration
下面是 org.apache.commons.io.input.TeeInputStream 类的声明 -
public class TeeInputStream
extends ProxyInputStream
Example of TeeInputStream Class
在此示例中,关闭 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 TutorialsPoint. 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());
}
}
}
}
Apache Commons IO - TeeOutputStream Class
TeeOutputStream 拆分 OutputStream。它以 Unix“tee”命令命名。它允许流分支到两个流。
Class Declaration
下面是 org.apache.commons.io.output.TeeOutputStream 类的声明 -
public class TeeOutputStream
extends ProxyOutputStream
Example of TeeOutputStream Class
在此示例中,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 TutorialsPoint. 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());
}
}
}
}