Apache FileUtils 教程展示了如何使用 Apache FileUtils 在 Java 中处理文件和目录。这些示例读取、写入、复制、创建、删除、列出和获取文件大小。
Apache FileUtils 是通用的文件操作实用程序。 FileUtils 是 Apache Commons IO 的一部分,Apache Commons IO 是一个实用程序库,用于协助在 Java 中开发 IO 功能。
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
在示例中,我们使用 commons-io
依赖项。
使用 FileUtils.touch
创建新文件并使用 FileUtils.deleteQuietly
删除。
package com.zetcode; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; public class CreateDeleteFileEx { public static void main(String[] args) throws IOException { File myfile = new File("src/main/resources/myfile.txt"); FileUtils.touch(myfile); if (myfile.exists()) { System.out.println("The file exists"); } else { System.out.println("The file does not exist"); } FileUtils.deleteQuietly(myfile); if (myfile.exists()) { System.out.println("The file exists"); } else { System.out.println("The file does not exist"); } } }
该示例创建一个新文件,检查其是否存在,将其删除,然后再次检查其是否存在。
File myfile = new File("src/main/resources/myfile.txt"); FileUtils.touch(myfile);
使用 FileUtils.touch
创建一个新文件。
if (myfile.exists()) {
我们使用 File's
exists
方法检查文件是否存在。
FileUtils.deleteQuietly(myfile);
使用 FileUtils.deleteQuietly
删除文件。
可以使用 FileUtils.copyFile
和 FileUtils.copyFileToDirectory
方法复制文件。要比较文件内容,我们可以使用 FileUtils.contentEquals
方法。
package com.zetcode; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; public class CopyFileEx { public static void main(String[] args) throws IOException { File myfile1 = new File("src/main/resources/myfile.txt"); File myfile2 = new File("src/main/resources/myfile2.txt"); FileUtils.copyFile(myfile1, myfile2); if (FileUtils.contentEquals(myfile1, myfile2)) { System.out.println("The files have equal content"); } else { System.out.println("The files do not have equal content"); } File docs = new File("src/main/resources/docs"); FileUtils.forceMkdir(docs); FileUtils.copyFileToDirectory(myfile2, docs); } }
该示例复制同一目录中的文件并比较它们的内容。然后它创建一个新目录并将文件复制到这个新目录。
FileUtils.copyFile(myfile1, myfile2);
我们使用 FileUtils.copyFile
在同一目录中复制一个文件。
if (FileUtils.contentEquals(myfile1, myfile2)) {
我们使用 FileUtils.contentEquals
比较两个文件的内容。
FileUtils.forceMkdir(docs);
使用 FileUtils.forceMkdir
创建一个新目录。
FileUtils.copyFileToDirectory(myfile2, docs);
使用 FileUtils.copyFileToDirectory
将文件复制到新目录。
在下面的示例中,我们将 URL 资源复制到本地文件。
package com.zetcode; import java.io.File; import java.io.IOException; import java.net.URL; import java.nio.charset.StandardCharsets; import org.apache.commons.io.FileUtils; public class CopyUrl2FileEx { public static void main(String[] args) throws IOException { URL myurl = new URL("http://www.something.com"); File myfile = new File("src/main/resources/something.html"); FileUtils.copyURLToFile(myurl, myfile); String content = FileUtils.readFileToString(myfile, StandardCharsets.UTF_8.name()); System.out.println(content); } }
该示例复制 HTML 页面并将其写入文件。
URL myurl = new URL("http://www.something.com");
我们阅读了 www.something.com
网页的内容。
File myfile = new File("src/main/resources/something.html");
页面的 HTML 内容将写入 src/main/resources/something.html
文件。
FileUtils.copyURLToFile(myurl, myfile);
我们使用 FileUtils.copyURLToFile
将网页复制到本地文件。
String content = FileUtils.readFileToString(myfile, StandardCharsets.UTF_8.name()); System.out.println(content);
我们读取本地文件的内容并将其打印到控制台。
我们使用 FileUtils.sizeOf
确定文件大小,使用 FileUtils.sizeOfDirectory
确定目录大小。
package com.zetcode; import java.io.File; import org.apache.commons.io.FileUtils; public class GetFileSizeEx { public static void main(String[] args) { File myfile = new File("/home/janbodnar/tmp/rotunda.jpg"); long fileSizeB = FileUtils.sizeOf(myfile); System.out.printf("The size of file is: %d bytes\n", fileSizeB); File mydir = new File("/home/janbodnar/tmp"); long dirSizeB = FileUtils.sizeOfDirectory(mydir); double dirSizeKB = (double) dirSizeB / FileUtils.ONE_KB; double dirSizeMB = (double) dirSizeB / FileUtils.ONE_MB; System.out.printf("The size of directory is: %d bytes\n", dirSizeB); System.out.printf("The size of file is: %.2f kilobytes\n", dirSizeKB); System.out.printf("The size of file is: %.2f megabytes\n", dirSizeMB); } }
在示例中,我们获取文件和目录的大小。
double dirSizeKB = (double) dirSizeB / FileUtils.ONE_KB; double dirSizeMB = (double) dirSizeB / FileUtils.ONE_MB;
我们使用 FileUtils.ONE_KB
和 FileUtils.ONE_MB
常量来计算以千字节和兆字节为单位的大小。
可以使用 FileUtils.readFileToString
将文件读入字符串,或者使用 FileUtils.readLines
将文件读入字符串集合。
blue, tank, robot, planet, wisdom, cherry, chair, pen, keyboard, tree, forest, plant sky, movie, white, colour, music, dog, cat
这个文本文件位于 src/main/resources
目录中。
package com.zetcode; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.List; import org.apache.commons.io.FileUtils; public class ReadFileEx { public static void main(String[] args) throws IOException { File myfile = new File("src/main/resources/words.txt"); String contents = FileUtils.readFileToString(myfile, StandardCharsets.UTF_8.name()); System.out.println(contents); List<String> lines = FileUtils.readLines(myfile, StandardCharsets.UTF_8.name()); System.out.printf("There are %d lines in the file\n", lines.size()); System.err.printf("The second line is: %s", lines.get(1)); } }
该示例将一个文本文件读入一个字符串和一个字符串列表。
String contents = FileUtils.readFileToString(myfile, StandardCharsets.UTF_8.name());
在 FileUtils.readFileToString
方法的第二个参数中,我们指定文件编码类型。
使用 FileUtils.writeStringToFile
将字符串写入文件,使用 FileUtils.writeLines
将字符串集合写入文件。
package com.zetcode; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import org.apache.commons.io.FileUtils; public class WriteFileEx { public static void main(String[] args) throws IOException { String string = "Today is a gloomy day."; File myfile = new File("src/main/resources/myfile.txt"); FileUtils.writeStringToFile(myfile, string, StandardCharsets.UTF_8.name()); List<String> lines = new ArrayList<>(); lines.add("A dark forest."); lines.add("A stray dog."); lines.add("A massive mountain."); File myfile2 = new File("src/main/resources/myfile2.txt"); FileUtils.writeLines(myfile2, StandardCharsets.UTF_8.name(), lines); } }
该示例将一个字符串和一个字符串列表写入文件。
FileUtils.listFiles
方法根据选定的标准查找文件。
package com.zetcode; import java.io.File; import java.util.Collection; import org.apache.commons.io.FileUtils; public class ListFilesEx { public static void main(String[] args) { File myDir = new File("/home/janbodnar/tmp"); Collection<File> files = FileUtils.listFiles(myDir, new String[] {"txt", "html"}, true); files.stream().forEach(System.out::println); } }
在此示例中,我们使用 FileUtils.listFiles
来查找与 txt
或 html
匹配的文件> 扩展。
Collection<File> files = FileUtils.listFiles(myDir, new String[] {"txt", "html"}, true);
第二个参数是一个扩展数组;该文件必须匹配这些扩展名之一才能被选中。第三个参数指定我们也在子目录中搜索文件。
下一个示例搜索与过滤器匹配的文件。
package com.zetcode; import java.io.File; import java.util.Collection; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOCase; import org.apache.commons.io.filefilter.DirectoryFileFilter; import org.apache.commons.io.filefilter.NotFileFilter; import org.apache.commons.io.filefilter.WildcardFileFilter; public class ListFilesFilterEx { public static void main(String[] args) { File myDir = new File("/home/janbodnar/tmp"); Collection<File> files = FileUtils.listFiles(myDir, new WildcardFileFilter("*.txt", IOCase.SENSITIVE), new NotFileFilter(DirectoryFileFilter.DIRECTORY)); files.stream().forEach(System.out::println); } }
使用这个重写的 FileUtils.listFiles
方法,我们搜索与通配符过滤器匹配的文件。
Collection<File> files = FileUtils.listFiles(myDir, new WildcardFileFilter("*.txt", IOCase.SENSITIVE), new NotFileFilter(DirectoryFileFilter.DIRECTORY));
该方法的第一个参数是要搜索的目录名称。第二个参数是文件过滤器,最后一个是目录过滤器。我们使用 WildcardFileFilter
搜索与 *.txt
通配符匹配的文件,并使用 NotFileFilter< 禁用搜索目录/代码>。
FileUtils.getTempDirectoryPath
返回系统临时目录的路径,FileUtils.getUserDirectoryPath
返回用户主目录的路径。
package com.zetcode; import org.apache.commons.io.FileUtils; public class GetDirsEx { public static void main(String[] args) { String tempDir = FileUtils.getTempDirectoryPath(); System.out.println(tempDir); String userDir = FileUtils.getUserDirectoryPath(); System.out.println(userDir); } }
该示例检索并打印系统临时目录和用户目录。
在本文中,我们使用 Apache FileUtils 来处理文件。
List 所有 Java 教程.
地址:https://www.cundage.com/article/java-fileutils.html