Java Apache FileUtils

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

赞(0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

Java 教程