Apache FileUtils - 使用 Apache FileUtils 在 Java 中管理文件

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(311)   2023-06-26 07:54:18

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.copyFileFileUtils.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_KBFileUtils.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 来查找与 txthtml 匹配的文件> 扩展。

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 来处理文件。

List 所有 Java 教程.

地址:https://www.cundage.com/article/java-fileutils.html

相关阅读

Spring Boot Vue.js 教程展示了如何使用 Vue.js 框架创建一个简单的 Spring Boot。 Vue.js Vue.js 是一个用于构建用户界面的 JavaScript ...
JavaScript 是否已经取代 Java 成为新的“一次编写,随处运行”的编程语言?这完全取决于您的观点。随着 WebAssembly 等技术的出现,Java 可以在新奇的“一次编写,随处编...
Usage of TypeScript,微软基于 JavaScript 的强类型语言, has soared compared to six years ago, according to th...
云莓将基于 Spring 构建的 Java 后端与使用 Lit 构建的 TypeScript 前端相结合,一个快速、响应式的 JavaScript 框架。基于 Vaadin Fusion 的 H...
本博客严重偏向于 GWT(和基于 GWT 的框架),但我们牢记 GWT 将来可能会被其他技术接管,因此我们始终对探索其他平台/框架持开放态度。正如他们所说,多元化可以降低风险。每种编程语言,即使...
Java JSON 教程展示了如何使用 JSON-Java 在 Java 中进行 JSON 序列化和反序列化。 JSON(JavaScript 对象显示法) 是一种轻量级数据交换格式。人类易于读...
JHipster 是一个长期存在且雄心勃勃的混合 Java 和 JavaScript 项目,致力于使用现代反应式前端简化全栈 Java 应用程序的开发。 JHipster 开发团队不断发布新版本...
解析器是强大的工具,使用 ANTLR 可以编写可用于多种不同语言的各种解析器。 在这个完整的教程中,我们将: 解释基础:什么是解析器,它可以用来做什么 查看如何设置 ANTLR 以便在 Java...
Spring Boot JSON 教程展示了如何在 Spring Boot 注释中提供 JSON 数据。 春天 是一个流行的 Java 应用程序框架,弹簧贴 是 Spring 的演变,有助于创建...
根据最近一项全球开发人员调查,在开发人员偏好方面,JavaScript 和 Python 保持了持久力,而 锈 的使用率正在上升. 5 月 4 日的一份题为“开发者国家情况,第 22nd 版”的...