Apache Commons IO 是一个 Java 工具库,提供了许多用于简化文件和流操作的工具类。这些工具类可以帮助开发者更轻松地进行文件读写、流操作、文件过滤、文件比较等任务。Commons IO 是 Apache Commons 项目的一部分,旨在简化和增强 Java IO 的功能。
1. 主要功能概述
Apache Commons IO 主要包括以下功能:
- 文件和目录操作
- 文件内容的读取和写入
- 文件过滤器和比较器
- IO 缓冲区和数据处理
- 文件和流的复制和移动
2. 主要工具类
2.1 FileUtils
FileUtils
是一个用于简化文件操作的工具类,提供了许多静态方法来处理文件和目录。
-
常用方法
void copyFile(File srcFile, File destFile)
:复制文件。void copyDirectory(File srcDir, File destDir)
:复制目录及其内容。void deleteQuietly(File file)
:静默删除文件或目录(不抛出异常)。boolean contentEquals(File file1, File file2)
:比较两个文件的内容是否相等。String readFileToString(File file, Charset encoding)
:将文件内容读入字符串。
-
示例
import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; public class FileUtilsExample { public static void main(String[] args) { File sourceFile = new File("source.txt"); File targetFile = new File("target.txt"); try { // 复制文件 FileUtils.copyFile(sourceFile, targetFile); System.out.println("File copied successfully!"); // 读取文件内容 String content = FileUtils.readFileToString(sourceFile, "UTF-8"); System.out.println("File content: " + content); // 删除文件 FileUtils.deleteQuietly(targetFile); System.out.println("File deleted successfully!"); } catch (IOException e) { e.printStackTrace(); } } }
2.2 IOUtils
IOUtils
提供了用于操作流和字节的工具方法,简化了流的读取、写入和关闭操作。
-
常用方法
String toString(InputStream input)
:将输入流转换为字符串。byte[] toByteArray(InputStream input)
:将输入流转换为字节数组。void copy(InputStream input, OutputStream output)
:将一个输入流的内容复制到一个输出流。void closeQuietly(Closeable closeable)
:静默关闭流(不抛出异常)。
-
示例
import org.apache.commons.io.IOUtils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; public class IOUtilsExample { public static void main(String[] args) { String data = "Hello, Apache Commons IO!"; ByteArrayInputStream input = new ByteArrayInputStream(data.getBytes()); ByteArrayOutputStream output = new ByteArrayOutputStream(); try { // 复制数据 IOUtils.copy(input, output); String copiedData = output.toString("UTF-8"); System.out.println("Copied data: " + copiedData); } catch (IOException e) { e.printStackTrace(); } finally { // 关闭流 IOUtils.closeQuietly(input); IOUtils.closeQuietly(output); } } }
2.3 FilenameUtils
FilenameUtils
提供了用于处理文件名和路径的工具方法,简化了文件名和路径操作。
-
常用方法
String getExtension(String filename)
:获取文件扩展名。String getBaseName(String filename)
:获取文件名(不包括扩展名)。String normalize(String filename)
:规范化路径(去除多余的分隔符和冗余的目录)。
-
示例
import org.apache.commons.io.FilenameUtils; public class FilenameUtilsExample { public static void main(String[] args) { String filePath = "/path/to/file.txt"; // 获取文件扩展名 String extension = FilenameUtils.getExtension(filePath); System.out.println("File extension: " + extension); // 获取文件名(不包括扩展名) String baseName = FilenameUtils.getBaseName(filePath); System.out.println("Base name: " + baseName); // 规范化路径 String normalizedPath = FilenameUtils.normalize(filePath); System.out.println("Normalized path: " + normalizedPath); } }
2.4 FileFilterUtils
FileFilterUtils
提供了用于文件过滤的工具方法,使得可以根据特定条件过滤文件。
-
常用方法
IOFileFilter ageFileFilter(long minAge)
:创建根据文件年龄过滤文件的过滤器。IOFileFilter sizeFileFilter(long minSize)
:创建根据文件大小过滤文件的过滤器。IOFileFilter nameFileFilter(String name)
:创建根据文件名过滤文件的过滤器。
-
示例
import org.apache.commons.io.filefilter.FileFilterUtils; import org.apache.commons.io.filefilter.IOFileFilter; import java.io.File; import java.io.FileFilter; public class FileFilterUtilsExample { public static void main(String[] args) { File directory = new File("directoryPath"); // 创建文件过滤器,过滤出所有扩展名为 .txt 的文件 IOFileFilter txtFileFilter = FileFilterUtils.suffixFileFilter(".txt"); // 过滤文件 File[] files = directory.listFiles((FileFilter) txtFileFilter); if (files != null) { for (File file : files) { System.out.println("Filtered file: " + file.getName()); } } } }
3. 总结
Apache Commons IO 提供了一系列强大的工具类,简化了 Java IO 操作。通过 FileUtils
、IOUtils
、FilenameUtils
和 FileFilterUtils
等类,开发者可以高效地处理文件和流操作,避免编写冗长和重复的代码。这些工具类不仅提高了代码的可读性和可维护性,还提升了开发效率。