多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Apache `FileUtils`教程 原文:http://zetcode.com/java/fileutils/ Apache `FileUtils`教程显示了如何使用 Apache `FileUtils`来处理 Java 中的文件和目录。 这些示例读取,写入,复制,创建,删除,列出文件并获取文件大小。 Apache `FileUtils`是常规的文件操作工具。 `FileUtils`是 Apache Commons IO 的一部分,Apache Commons IO 是一个工具库,可帮助开发 Java 中的 IO 功能。 ```java <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> ``` 在示例中,我们使用`commons-io`依赖项。 ## Apache `FileUtils`创建和删除文件 使用`FileUtils.touch()`创建一个新文件,并使用`FileUtils.deleteQuietly()`将其删除。 `CreateDeleteFileEx.java` ```java 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"); } } } ``` 该示例创建一个新文件,检查其存在,将其删除,然后再次检查其存在。 ```java File myfile = new File("src/main/resources/myfile.txt"); FileUtils.touch(myfile); ``` 使用`FileUtils.touch()`创建一个新文件。 ```java if (myfile.exists()) { ``` 我们使用`File`的`exists()`方法检查文件是否存在。 ```java FileUtils.deleteQuietly(myfile); ``` 该文件用`FileUtils.deleteQuietly()`删除。 ## Apache `FileUtils`复制文件 可以使用`FileUtils.copyFile()`和`FileUtils.copyFileToDirectory()`方法复制文件。 要比较文件内容,我们可以使用`FileUtils.contentEquals()`方法。 `CopyFileEx.java` ```java 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); } } ``` 该示例将文件复制到同一目录中并比较它们的内容。 然后,它创建一个新目录并将文件复制到该新目录。 ```java FileUtils.copyFile(myfile1, myfile2); ``` 我们使用`FileUtils.copyFile()`将文件复制到同一目录中。 ```java if (FileUtils.contentEquals(myfile1, myfile2)) { ``` 我们用`FileUtils.contentEquals()`比较两个文件的内容。 ```java FileUtils.forceMkdir(docs); ``` 使用`FileUtils.forceMkdir()`创建一个新目录。 ```java FileUtils.copyFileToDirectory(myfile2, docs); ``` 使用`FileUtils.copyFileToDirectory()`将文件复制到新目录。 在下面的示例中,我们将 URL 资源复制到本地文件。 `CopyUrl2FileEx.java` ```java 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 页面并将其写入文件。 ```java URL myurl = new URL("http://www.something.com"); ``` 我们阅读了`www.something.com`网页的内容。 ```java File myfile = new File("src/main/resources/something.html"); ``` 页面的 HTML 内容将被写入`src/main/resources/something.html`文件。 ```java FileUtils.copyURLToFile(myurl, myfile); ``` 我们使用`FileUtils.copyURLToFile()`将网页复制到本地文件。 ```java String content = FileUtils.readFileToString(myfile, StandardCharsets.UTF_8.name()); System.out.println(content); ``` 我们读取本地文件的内容并将其打印到控制台。 ## Apache `FileUtils`获取文件大小 我们使用`FileUtils.sizeOf()`确定文件大小,并使用`FileUtils.sizeOfDirectory()`确定目录大小。 `GetFileSizeEx.java` ```java 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); } } ``` 在示例中,我们获得文件和目录的大小。 ```java double dirSizeKB = (double) dirSizeB / FileUtils.ONE_KB; double dirSizeMB = (double) dirSizeB / FileUtils.ONE_MB; ``` 我们使用`FileUtils.ONE_KB`和`FileUtils.ONE_MB`常数来计算大小(以千字节和兆字节为单位)。 ## Apache `FileUtils`读取文件 可以使用`FileUtils.readFileToString()`将文件读取为字符串,或者使用`FileUtils.readLines()`将文件读取为字符串集合。 `words.txt` ```java blue, tank, robot, planet, wisdom, cherry, chair, pen, keyboard, tree, forest, plant sky, movie, white, colour, music, dog, cat ``` 我们在`src/main/resources`目录中有此文本文件。 `ReadFileEx.java` ```java 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)); } } ``` 该示例将文本文件读入字符串和字符串列表。 ```java String contents = FileUtils.readFileToString(myfile, StandardCharsets.UTF_8.name()); ``` 在`FileUtils.readFileToString()`方法的第二个参数中,我们指定文件编码类型。 ## Apache `FileUtils`写入文件 使用`FileUtils.writeStringToFile()`将字符串写入文件,使用`FileUtils.writeLines()`将字符串写入字符串集合。 `WriteFileEx.java` ```java 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); } } ``` 该示例将一个字符串和一个字符串列表写入文件。 ## Apache `FileUtils`列出文件 `FileUtils.listFiles()`方法根据选择的条件查找文件。 `ListFilesEx.java` ```java 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`扩展名匹配的文件。 ```java Collection<File> files = FileUtils.listFiles(myDir, new String[] {"txt", "html"}, true); ``` 第二个参数是扩展数组。 该文件必须与要选择的这些扩展名之一匹配。 第三个参数指定我们也在子目录中搜索文件。 下一个示例搜索与过滤器匹配的文件。 `ListFilesFilterEx.java` ```java 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()`方法,我们搜索与通配符过滤器匹配的文件。 ```java Collection<File> files = FileUtils.listFiles(myDir, new WildcardFileFilter("*.txt", IOCase.SENSITIVE), new NotFileFilter(DirectoryFileFilter.DIRECTORY)); ``` 该方法的第一个参数是要搜索的目录名称。第二个参数是文件过滤器,最后一个是目录过滤器。 我们使用`WildcardFileFilter`搜索与`*.txt`通配符匹配的文件,并禁用`NotFileFilter`搜索目录。 ## Apache `FileUtils`获取目录 `FileUtils.getTempDirectoryPath()`返回到系统临时目录的路径,`FileUtils.getUserDirectoryPath()`返回到用户的主目录的路径。 `GetDirsEx.java` ```java 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`处理文件。 您可能也对相关教程感兴趣:[用 Java 创建文件](/java/createfile/),[用 Java 复制文件](/java/copyfile/), [Java 文件大小](/java/filesize/),[用 Java 读取文本文件](/articles/javareadtext/) ,[用 Java 读写 ICO 图像](/articles/javaico/), [Java Swing 教程](/tutorials/javaswingtutorial/), [Java 教程](/lang/java/),[用 Java 显示图像](/java/displayimage/)。