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
依赖项。
Apache FileUtils
创建和删除文件
使用FileUtils.touch()
创建一个新文件,并使用FileUtils.deleteQuietly()
将其删除。
CreateDeleteFileEx.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");
}
}
}
该示例创建一个新文件,检查其存在,将其删除,然后再次检查其存在。
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()
删除。
Apache FileUtils
复制文件
可以使用FileUtils.copyFile()
和FileUtils.copyFileToDirectory()
方法复制文件。 要比较文件内容,我们可以使用FileUtils.contentEquals()
方法。
CopyFileEx.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);
}
}
该示例将文件复制到同一目录中并比较它们的内容。 然后,它创建一个新目录并将文件复制到该新目录。
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 资源复制到本地文件。
CopyUrl2FileEx.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 页面并将其写入文件。
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);
我们读取本地文件的内容并将其打印到控制台。
Apache FileUtils
获取文件大小
我们使用FileUtils.sizeOf()
确定文件大小,并使用FileUtils.sizeOfDirectory()
确定目录大小。
GetFileSizeEx.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);
}
}
在示例中,我们获得文件和目录的大小。
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
blue, tank, robot, planet, wisdom, cherry,
chair, pen, keyboard, tree, forest, plant
sky, movie, white, colour, music, dog, cat
我们在src/main/resources
目录中有此文本文件。
ReadFileEx.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));
}
}
该示例将文本文件读入字符串和字符串列表。
String contents = FileUtils.readFileToString(myfile,
StandardCharsets.UTF_8.name());
在FileUtils.readFileToString()
方法的第二个参数中,我们指定文件编码类型。
Apache FileUtils
写入文件
使用FileUtils.writeStringToFile()
将字符串写入文件,使用FileUtils.writeLines()
将字符串写入字符串集合。
WriteFileEx.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
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);
第二个参数是扩展数组。 该文件必须与要选择的这些扩展名之一匹配。 第三个参数指定我们也在子目录中搜索文件。
下一个示例搜索与过滤器匹配的文件。
ListFilesFilterEx.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()
方法,我们搜索与通配符过滤器匹配的文件。
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
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 处理文件。