【Apache Commons IO 工具包常用方法】

FileUtils

提供文件及目录操作的常用方法。

方法名描述
copyFile(File src, File dest)复制文件到目标路径。
copyFileToDirectory(File src, File dir)复制文件到指定目录。
copyDirectory(File srcDir, File destDir)递归复制整个目录。
copyDirectoryToDirectory(File srcDir, File destDir)复制目录到目标目录下。
deleteDirectory(File dir)递归删除目录及其内容。
deleteQuietly(File file)静默删除文件或目录(忽略异常)。
readFileToString(File file, Charset encoding)读取文件内容为字符串。
readLines(File file, Charset encoding)读取文件内容为字符串列表(按行分割)。
writeStringToFile(File file, String data, Charset encoding)将字符串写入文件。
writeLines(File file, Collection<?> lines)将集合内容按行写入文件。
forceMkdir(File dir)强制创建目录(包括父目录)。
sizeOf(File file)计算文件或目录的大小(字节)。
sizeOfDirectory(File dir)计算目录的总大小。
moveFile(File src, File dest)移动文件到目标路径。
moveToDirectory(File src, File dir, boolean createDir)移动文件或目录到指定目录。
touch(File file)创建空文件或更新文件修改时间。
cleanDirectory(File dir)清空目录内容(保留目录本身)。
contentEquals(File file1, File file2)比较两个文件内容是否相同。
checksum(File file, Checksum checksum)计算文件的校验和。
iterateFiles(File dir, String[] extensions, boolean recursive)遍历目录中指定扩展名的文件。
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class FileUtilsExample {
    public static void main(String[] args) {
        try {
            // 复制文件
            File srcFile = new File("source.txt");
            File destFile = new File("dest.txt");
            FileUtils.copyFile(srcFile, destFile);
            System.out.println("文件复制成功!");

            // 读取文件内容
            String content = FileUtils.readFileToString(destFile, StandardCharsets.UTF_8);
            System.out.println("文件内容:\n" + content);

        } catch (IOException e) {
            System.err.println("操作失败: " + e.getMessage());
        }
    }
}

IOUtils

处理 I/O 流、读写操作的通用方法。

方法名描述
copy(InputStream input, OutputStream output)将输入流内容复制到输出流。
copyLarge(InputStream input, OutputStream output)复制大文件流(支持长字节)。
toByteArray(InputStream input)将输入流转换为字节数组。
toString(InputStream input, Charset encoding)将输入流内容转换为字符串。
readLines(InputStream input, Charset encoding)按行读取输入流内容为字符串列表。
write(byte[] data, OutputStream output)将字节数组写入输出流。
write(String data, OutputStream output, Charset encoding)将字符串写入输出流。
closeQuietly(Closeable closeable)静默关闭资源(忽略异常,已过时)。
close(Closeable closeable)关闭资源并抛出可能的异常。
readFully(InputStream input, int length)从输入流中精确读取指定长度的字节。
toInputStream(String input, Charset encoding)将字符串转换为输入流。
copy(Reader reader, Writer writer)将字符流内容复制到输出字符流。
buffer(InputStream input)将输入流包装为缓冲流(推荐替代手动缓冲)。
import org.apache.commons.io.IOUtils;
import java.io.*;

public class IOUtilsExample {
    public static void main(String[] args) {
        try (
            InputStream in = new FileInputStream("input.txt");
            OutputStream out = new FileOutputStream("output.txt")
        ) {
            // 复制流
            IOUtils.copy(in, out);
            System.out.println("流复制完成!");

            // 将字符串写入输出流
            String data = "Hello, Commons IO!";
            IOUtils.write(data, out, StandardCharsets.UTF_8);

        } catch (IOException e) {
            System.err.println("IO错误: " + e.getMessage());
        }
    }
}

FilenameUtils

处理文件路径和名称的规范化与转换。

方法名描述
concat(String basePath, String fullPath)拼接两个路径(自动处理分隔符)。
getExtension(String filename)获取文件扩展名(不带.)。
removeExtension(String filename)移除文件名的扩展名。
normalize(String filename)规范化路径(处理.、…和多余分隔符)。
separatorsToUnix(String path)将路径分隔符转换为 Unix 风格(/)。
separatorsToWindows(String path)将路径分隔符转换为 Windows 风格(\)。
getFullPath(String filename)获取文件的完整路径(不含文件名)。
getName(String filename)获取文件名(含扩展名,不含路径)。
isExtension(String filename, String extension)检查文件是否具有指定扩展名。
import org.apache.commons.io.FilenameUtils;

public class FilenameUtilsExample {
    public static void main(String[] args) {
        String fullPath = FilenameUtils.concat("/base/path", "subdir/file.txt");
        System.out.println("拼接路径: " + fullPath); // 输出: /base/path/subdir/file.txt

        String extension = FilenameUtils.getExtension("document.pdf");
        System.out.println("文件扩展名: " + extension); // 输出: pdf
    }
}

FileSystemUtils

提供文件系统相关工具方法。

方法名描述
freeSpaceKb(String path)获取指定路径的可用空间(单位:KB)。

LineIterator

逐行读取文件的迭代器工具。

方法名描述
hasNext()检查是否还有下一行。
nextLine()获取下一行内容。
close()关闭底层流资源。

EndianUtils

处理字节序(大端序、小端序)转换的工具类。

方法名描述
swapShort(short value)交换 short 类型的字节序。
swapInteger(int value)交换 int 类型的字节序。
swapLong(long value)交换 long 类型的字节序。
readSwappedShort(byte[] data, int offset)从字节数组中按小端序读取 short 值。
writeSwappedInteger(byte[] data, int offset, int value)按小端序将 int 值写入字节数组。
import org.apache.commons.io.EndianUtils;

public class EndianExample {
    public static void main(String[] args) {
        int original = 0x12345678;
        int swapped = EndianUtils.swapInteger(original);
        System.out.printf("原始值: 0x%x, 转换后: 0x%x\n", original, swapped); // 输出: 0x12345678 → 0x78563412

        byte[] buffer = new byte[4];
        EndianUtils.writeSwappedInteger(buffer, 0, original);
        System.out.println("写入的字节: " + bytesToHex(buffer)); // 输出: 78 56 34 12
    }

    private static String bytesToHex(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            sb.append(String.format("%02X ", b));
        }
        return sb.toString().trim();
    }
}

FileCleaningTracker

用于跟踪和自动删除临时文件的工具类。

方法名描述
track(File file, Object marker)注册文件,当标记对象被垃圾回收时删除文件。
exitWhenFinished()等待所有跟踪文件删除完成后退出。

Streams

提供简单流操作的补充方法(部分与 IOUtils 重叠)。

方法名描述
copy(InputStream input, OutputStream output, boolean closeInput)复制流,可选择是否关闭输入流。
readLines(InputStream input)按默认编码读取输入流为字符串列表。

FileFilterUtils

组合文件过滤器的工具类。

方法名描述
and(IOFileFilter… filters)逻辑“与”组合多个过滤器。
or(IOFileFilter… filters)逻辑“或”组合多个过滤器。
not(IOFileFilter filter)逻辑“非”反转过滤器条件。
nameFileFilter(String… names)过滤指定文件名的文件。
suffixFileFilter(String… suffixes)过滤指定后缀名的文件。
sizeFileFilter(long size, boolean acceptLarger)按文件大小过滤文件。
ageFileFilter(long cutoffMillis, boolean acceptOlder)按文件修改时间过滤文件。
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import java.io.File;

public class FileFilterExample {
    public static void main(String[] args) {
        File dir = new File("search_dir");

        // 定义过滤器(查找大于 1KB 的 .txt 文件)
        IOFileFilter txtFilter = FileFilterUtils.suffixFileFilter(".txt");
        IOFileFilter sizeFilter = FileFilterUtils.sizeFileFilter(1024, true);
        IOFileFilter combinedFilter = FileFilterUtils.and(txtFilter, sizeFilter);

        File[] files = dir.listFiles(combinedFilter);
        if (files != null) {
            for (File file : files) {
                System.out.println("找到文件: " + file.getName());
            }
        }
    }
}

PathUtils

处理路径字符串的工具类(与 FilenameUtils 互补)。

方法名描述
getPath(String… entries)安全拼接路径片段(自动处理分隔符)。
toFile(String… pathComponents)将路径片段转换为 File 对象。

CountingInputStream / CountingOutputStream

统计读取或写入字节数的代理流。

方法名描述
getByteCount()获取已处理的字节总数。
resetByteCount()重置字节计数器。

Tailer

实时监听文件尾部内容变化的工具类。

方法名描述
run()启动监听线程。
stop()停止监听线程。
import org.apache.commons.io.input.Tailer;
import org.apache.commons.io.input.TailerListenerAdapter;
import java.io.File;

public class TailerExample {
    public static void main(String[] args) {
        File logFile = new File("app.log");
        TailerListener listener = new TailerListenerAdapter() {
            @Override
            public void handle(String line) {
                System.out.println("新的日志: " + line);
            }
        };

        // 创建 Tailer(每隔 1 秒检查一次)
        Tailer tailer = Tailer.create(logFile, listener, 1000);

        // 保持主线程运行(实际应用中可能需要线程管理)
        try {
            Thread.sleep(60000); // 监听 60 秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            tailer.stop();
        }
    }
}

ComparableFile

增强的 File 类,支持直接比较文件内容。

方法名描述
contentEquals(ComparableFile other)比较两个文件内容是否相同。

CharSequenceReader / CharSequenceInputStream

将字符串或字符序列转换为流。

方法名描述
read()按字符或字节读取内容。

FileAlterationMonitor

监听文件系统变化的工具类。

方法名描述
start()启动监听服务。
stop()停止监听服务。

其他辅助工具

  • AutoCloseInputStream:自动关闭底层资源的输入流。
  • BOMInputStream:处理 Unicode 字节顺序标记(BOM)。
  • TeeInputStream:将输入流同时写入多个输出流。
  • NullOutputStream:模拟“黑洞”输出流(丢弃所有写入内容)。

注意事项

  • 流资源管理:优先使用 try-with-resources 替代 closeQuietly(后者已过时)。
  • 性能优化:处理大文件时推荐使用 copyLarge 或缓冲流。
  • 线程安全:Tailer 和 FileAlterationMonitor 需注意多线程同步问题。
  • 版本兼容性:部分方法在不同 Commons IO 版本中可能行为不同(如路径规范化逻辑)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值