Java工具库——Commons IO的50个常用方法
转载自:https://juejin.cn/post/7294568614202966035
工具库介绍
Commons IO(Apache Commons IO)是一个广泛用于 Java 开发的开源工具库,由Apache软件基金会维护和支持。这个库旨在简化文件和流操作,提供了各种实用工具类和方法,以便更轻松地进行输入输出操作。以下是 Commons IO 的一些主要特点和功能:
-
文件操作:Commons IO 提供了大量用于文件和目录操作的方法,包括创建、删除、重命名、复制、移动文件,以及递归地操作目录结构。
-
流处理:你可以使用 Commons IO 处理各种输入和输出流,包括读取、写入和操作流数据。这对于处理文本文件、二进制文件以及网络通信非常有用。
-
文件过滤和筛选:Commons IO 允许你轻松地筛选文件和目录,根据各种条件,如文件扩展名、文件大小、最后修改时间等。
-
文件内容操作:你可以比较两个文件的内容,查找文件中的文本,以及进行替换等操作。
-
自动关闭流:Commons IO 提供了自动关闭流的功能,确保在处理文件和流时,资源得以正确释放,而无需显式调用
close()
方法。 -
异常处理:库中的方法通常会处理 I/O 异常,以简化代码中的错误处理。
-
性能和可靠性:Commons IO 被广泛使用,因为它经过了精心设计,以提供高性能和可靠性。这对于处理大型文件和在生产环境中运行的应用程序非常重要。
Commons IO 是一个非常有用的工具库,特别是在需要处理文件和流的 Java 应用程序中。它可以显著简化日常的 I/O 任务,减少了编写重复性代码的需要,提高了开发效率。如果你是 Java 开发者,特别是在处理文件和流方面,建议考虑使用 Commons IO 来简化你的工作。你可以在 Apache Commons IO 的官方网站上找到详细的文档和示例代码,以了解如何使用这个库。
方法列举
-
拷贝文件:
File source = new File("source.txt"); File destination = new File("destination.txt"); FileUtils.copyFile(source, destination);
这个方法用于将一个文件从源路径复制到目标路径。
-
删除文件:
File fileToDelete = new File("fileToDelete.txt"); FileUtils.forceDelete(fileToDelete);
这个方法用于强制删除一个文件,即使它是只读的或不存在。
-
检查文件是否存在:
File fileToCheck = new File("checkFile.txt"); boolean fileExists = fileToCheck.exists();
用于检查给定文件是否存在。
-
递归拷贝目录:
File sourceDir = new File("sourceDir"); File destDir = new File("destDir"); FileUtils.copyDirectory(sourceDir, destDir);
这个方法将递归地拷贝一个目录及其所有内容到目标目录。
-
递归删除目录:
File directoryToDelete = new File("directoryToDelete"); FileUtils.deleteDirectory(directoryToDelete);
用于递归删除一个目录及其所有内容。
-
获取文件扩展名:
String fileName = "example.txt"; String fileExtension = FilenameUtils.getExtension(fileName);
通过文件名获取文件的扩展名,例如,对于 "example.txt",将返回 "txt"。
-
判断文件是否是目录:
File file = new File("dir"); boolean isDirectory = file.isDirectory();
用于检查给定文件是否是目录。
-
创建目录:
File newDir = new File("newDir"); FileUtils.forceMkdir(newDir);
用于创建目录,包括创建任何中间目录(如果它们不存在)。
-
获取文件大小:
File file = new File("file.txt"); long fileSize = FileUtils.sizeOf(file);
获取文件的大小,以字节为单位。
-
读取文件到字符串:
File fileToRead = new File("readMe.txt"); String fileContent = FileUtils.readFileToString(fileToRead, "UTF-8");
用于将文件内容读取为字符串,可以指定字符编码。
-
写入字符串到文件:
File outputFile = new File("output.txt"); String content = "Hello, World!"; FileUtils.writeStringToFile(outputFile, content, "UTF-8");
用于将字符串写入文件,可以指定字符编码。
-
列出目录中的文件:
File directory = new File("directory"); String[] filesInDir = directory.list();
用于获取指定目录中的文件和子目录的名称列表。
-
获取文件的最后修改时间:
File file = new File("file.txt"); long lastModified = file.lastModified();
获取文件的最后修改时间,以毫秒为单位。
-
移动文件:
File oldFile = new File("oldFile.txt"); File newFile = new File("newFile.txt"); FileUtils.moveFile(oldFile, newFile);
用于将文件从一个位置移动到另一个位置。
-
查找文件:
File searchDir = new File("searchDir"); Collection<File> foundFiles = FileUtils.listFiles(searchDir, TrueFileFilter.TRUE, TrueFileFilter.TRUE);
用于在目录中查找文件,并将结果作为文件对象的集合返回。
-
关闭输入流:
InputStream inputStream = ...; // 初始化输入流 IOUtils.closeQuietly(inputStream);
用于关闭输入流,忽略任何可能的异常。
-
关闭输出流:
OutputStream outputStream = ...; // 初始化输出流 IOUtils.closeQuietly(outputStream);
用于关闭输出流,忽略任何可能的异常。
-
逐行读取文件:
File file = new File("file.txt"); LineIterator lines = FileUtils.lineIterator(file, "UTF-8"); while (lines.hasNext()) { String line = lines.next(); // 处理每一行 } lines.close(); // 关闭 LineIterator
用于逐行读取文件内容,避免一次性加载整个文件。
-
拷贝输入流到输出流:
InputStream inputStream = ...; // 初始化输入流 OutputStream outputStream = ...; // 初始化输出流 IOUtils.copy(inputStream, outputStream);
用于将输入流的内容拷贝到输出流,通常用于文件拷贝。
-
拷贝文件内容到输出流:
File sourceFile = new File("source.txt"); OutputStream outputStream = ...; // 初始化输出流 FileUtils.copyFile(sourceFile, outputStream);
用于将文件内容拷贝到输出流,这样你可以将文件的内容传输到其他地方,如网络连接或压缩流。
-
获取文件的父目录:
File file = new File("file.txt"); File parentDir = file.getParentFile();
用于获取文件的父目录,返回一个
File
对象。 -
获取临时目录:
File tempDir = FileUtils.getTempDirectory();
用于获取操作系统的临时目录。
-
获取用户主目录:
File userHomeDir = FileUtils.getUserDirectory();
用于获取用户的主目录,通常是用户文件的根目录。 当然,我会继续列出更多 Commons IO 方法,以满足 50 个方法的要求。以下是更多的方法示例和详细解释:
-
比较文件内容:
File file1 = new File("file1.txt"); File file2 = new File("file2.txt"); boolean contentEqual = FileUtils.contentEquals(file1, file2);
用于比较两个文件的内容是否相同。
-
检查文件是否可写:
File file = new File("writableFile.txt"); boolean isWritable = file.canWrite();
用于检查文件是否可写。
-
获取文件的绝对路径:
File file = new File("file.txt"); String absolutePath = file.getAbsolutePath();
用于获取文件的绝对路径。
-
获取目录下的子目录:
File directory = new File("parentDir"); File[] subdirectories = directory.listFiles(File::isDirectory);
用于获取目录下的所有子目录。
-
获取文件的扩展名(不包括点号):
String fileName = "example.txt"; String extension = FilenameUtils.getExtension(fileName);
用于获取文件的扩展名,不包括点号,例如,对于 "example.txt",将返回 "txt"。
-
判断文件是否是隐藏文件:
File file = new File("hiddenFile.txt"); boolean isHidden = file.isHidden();
用于检查文件是否是隐藏文件。
-
获取操作系统文件分隔符:
String fileSeparator = File.separator;
用于获取操作系统的文件分隔符,例如,在 Windows 中是反斜杠(\),在 Unix/Linux 中是正斜杠(/)。
-
关闭 Reader:
Reader reader = ...; // 初始化 Reader IOUtils.closeQuietly(reader);
用于关闭字符流 Reader,忽略任何可能的异常。
-
关闭 Writer:
Writer writer = ...; // 初始化 Writer IOUtils.closeQuietly(writer);
用于关闭字符流 Writer,忽略任何可能的异常。
-
递归列出目录中的文件:
File directory = new File("parentDir"); Collection<File> allFiles = FileUtils.listFiles(directory, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
用于递归列出目录中的所有文件,包括子目录中的文件。
-
获取文件的最后访问时间:
File file = new File("file.txt"); long lastAccessTime = FileUtils.lastAccessed(file);
用于获取文件的最后访问时间,以毫秒为单位。
-
删除目录中的文件:
File directory = new File("dirToDelete"); FileUtils.cleanDirectory(directory);
用于删除目录中的所有文件,但保留目录结构。
-
获取临时文件:
File tempFile = File.createTempFile("temp", ".txt");
用于创建一个临时文件,通常在操作完成后会被自动删除。
-
获取文件的父目录路径:
File file = new File("file.txt"); String parentPath = file.getParent();
用于获取文件的父目录的路径。
-
获取文件的大小的可读表示:
File file = new File("file.txt"); String readableSize = FileUtils.byteCountToDisplaySize(file.length());
用于将文件大小以字节表示转换为易读的格式,例如 "2.5 MB"。
-
创建临时目录:
File tempDir = File.createTempFile("tempDir", ""); tempDir.delete(); // 删除文件,使其成为目录
用于创建一个临时目录。
-
读取 URL 内容到字符串:
String urlContent = IOUtils.toString(new URL("https://example.com"));
用于将 URL 的内容读取为字符串。
-
写入字符串到 URL:
URL url = new URL("https://example.com"); String content = "Hello, World!"; IOUtils.write(content, url.openConnection().getOutputStream(), "UTF-8");
用于将字符串写入 URL。
-
比较目录结构:
File dir1 = new File("directory1"); File dir2 = new File("directory2"); boolean isSame = FileUtils.contentEqualsIgnoreEOL(dir1, dir2, "UTF-8");
用于比较两个目录的内容是否相同,忽略不同操作系统的换行符。
-
获取文件的创建时间:
File file = new File("file.txt"); BasicFileAttributes attributes = Files.readAttributes(file.toPath(), BasicFileAttributes.class); FileTime creationTime = attributes.creationTime();
用于获取文件的创建时间。
-
文件拷贝,保留文件属性:
File source = new File("source.txt"); File destination = new File("destination.txt"); FileUtils.copyFile(source, destination, true);
用于拷贝文件,保留原文件的属性,如权限和时间戳。
-
获取临时文件夹的路径:
String tempDirPath = System.getProperty("java.io.tmpdir");
用于获取操作系统的临时文件夹路径。
-
文件重命名:
File oldFile = new File("oldName.txt"); File newFile = new File("newName.txt"); FileUtils.moveFile(oldFile, newFile);
用于将文件重命名。
-
文件内容替换:
File file = new File("file.txt"); String oldText = "replaceThis"; String newText = "withThis"; String replacedText = FileUtils.readFileToString(file, "UTF-8"); replacedText = StringUtils.replace(replacedText, oldText, newText); FileUtils.writeStringToFile(file, replacedText, "UTF-8"); ```用于替换文件中的指定文本。
48. 递归删除指定文件:
```java
File directory = new File("parentDir");
String fileNameToDelete = "fileToDelete.txt";
FileFilter fileFilter = new NameFileFilter(fileNameToDelete);
Collection<File> foundFiles = FileUtils.listFiles(directory, fileFilter, TrueFileFilter.TRUE);
for (File fileToDelete : foundFiles) {
FileUtils.forceDelete(fileToDelete);
}
```
用于递归删除指定文件名的文件。
49. 将文件内容附加到已存在的文件:
```java
File fileToAppend = new File("append.txt");
FileUtils.writeStringToFile(fileToAppend, "Appended Text", "UTF-8", true);
```
用于将文本内容附加到已存在的文件。
50. 递归列出目录中的文件和子目录:
```java
File directory = new File("parentDir");
Collection<File> allFilesAndDirs = FileUtils.listFilesAndDirs(directory, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
```
用于递归列出目录中的所有文件和子目录。
标签:文件,Java,file,Commons,50,File,FileUtils,new,txt
From: https://www.cnblogs.com/wanghengbin/p/17922413.html