掌握Guava的IO操作工具:让你的文件处理更简单、高效

2023-12-21 19:42:27

推荐语

如果你正在处理文件操作,可能会使用很多第三方库来帮助自己完成这些任务。但是,即使你已经有了很多经验,也有可能遇到一些问题,甚至不知道该如何开始。在这种情况下,Guava 的 IO 操作工具可以为你提供一些简单而有效的解决方案。本文将介绍 Guava 的 IO 操作工具,并详细讲解它们的使用方法,旨在帮助读者更好地掌握如何使用这些工具,优化文件操作并提高效率。作为一个谦虚的程序员,我们应该不断学习,不断进步,相信本文能对你有所帮助。

关于Guava的IO操作工具

Guava是一个Google开发的Java库,其中包含了大量实用的工具类,其中就包括IO操作工具类。这些IO操作工具类可以极大地简化Java IO编程,提高代码的可读性和可维护性。通过使用这些工具类,我们可以更加方便地进行文件处理、流处理和资源访问等操作。

Guava的IO操作工具盘点

Guava的IO操作工具种类繁多,远不止下面列举的这些。在这里,我仅就一些我认为常用且好用的工具方法进行了盘点。如果各位读者还知道其他优秀的工具,而它们未被包括在此次盘点范围之内,还请你能在评论区告诉我。期待与大家深入交流,共同学习,谦虚地接受各位的建议和分享。

  • ByteStreams类提供了用于操作字节流的方法和实用程序。这个类可以帮助你快速地复制、读取和写入字节流,以及处理大量的字节数据。它还包含了一些常见的数据处理操作,例如合并多个输入流,将输入流转换成字节数组等等。
  • CharStreams类提供了用于操作字符流的方法和实用程序。这个类可以帮助你快速地复制、读取和写入字符流,以及处理大量的字符数据。它还包含了一些常见的数据处理操作,例如将字符流转换成字符串,将字符串转换成字符流等等。
  • Files提供了用于操作文件系统的方法和实用程序。这个类可以帮助你快速地创建、删除、移动和复制文件和目录,以及查询有关文件和目录的元数据。它还包含了一些常见的文件操作,例如递归遍历一个目录,计算文件的md5值等等。
  • Resources类提供了用于读取类路径资源的方法和实用程序。这个类可以帮助你快速地读取类路径中的资源文件,例如配置文件、图片等等。它还包含了一些常见的资源操作,例如获取资源的URL、将资源读取成字符串等等。

环境配置

目前maven中央仓库的最新版本是32.1.3-jre,本篇文章的所有示例也是基于这个版本:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>32.1.3-jre</version>
</dependency>

Guava的IO操作工具如何使用

ByteStreams

ByteStreams 类的一些核心方法和对应的代码示例梳理:

  • toByteArray(InputStream input) 将输入流中的数据读取为字节数组。
@Test
public void test1() {
    String fileName = "e:/text/test.txt";
    byte[] byteArray = new byte[0];
    try {
        InputStream inputStream = new FileInputStream(fileName);
        byteArray = ByteStreams.toByteArray(inputStream);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    String str = new String(byteArray, Charset.forName("UTF-8"));
    System.out.println(str);
}
  • copy(InputStream input, OutputStream output) 将输入流的内容复制到输出流中。
@Test
public void test2() {
    try {
        String fileName = "e:/text/test.txt";
        InputStream input = new FileInputStream(fileName);
        String targetFileName= "e:/text/test2.txt";
        OutputStream output = new FileOutputStream(targetFileName);
        ByteStreams.copy(input, output);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

CharStreams

CharStreams 类的一些核心方法和对应的代码示例梳理:

  • toString(Readable readable):将一个可读字符流转换为字符串。
@Test
public void test3() {
    String fileName = "e:/text/test.txt";
    String string = null;
    try {
        FileReader fileReader = new FileReader(fileName);
        string = CharStreams.toString(fileReader);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    System.out.println(string);
}
  • copy(Readable from, Appendable to):将一个可读字符流复制到一个可追加的目标(如StringBuilder或Writer)中。
@Test
public void test4() {
    String fileName = "e:/text/test.txt";
    StringBuilder builder = new StringBuilder();
    try {
        FileReader fileReader = new FileReader(fileName);
        CharStreams.copy(fileReader, builder);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    System.out.println(builder.toString());
}
  • readLines(Readable readable):将一个可读字符流的内容按行读取到一个列表中。
@Test
public void test5() {
    String fileName = "e:/text/test.txt";
    List<String> lines = null;
    try {
        FileReader fileReader = new FileReader(fileName);
        lines = CharStreams.readLines(fileReader);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    System.out.println(lines.size());
}

Files

Files类的一些核心方法和对应的代码示例梳理:

copy(File from, File to):方法将源文件复制到目标文件。如果目标文件不存在,则会创建一个新文件。如果目标文件已经存在,Files.copy() 方法将覆盖它。

@Test
public void test6() {
    String fileName = "e:/text/test.txt";
    String targetFileName = "e:/text/test2.txt";
    List<String> list;
    try {
        Files.copy(new File(fileName), new File(targetFileName));
        list = Files.readLines(new File(targetFileName), Charsets.UTF_8);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    System.out.println(list.size());
}

readLines(File file, Charset charset):该方法用于读取文本文件的内容,并将每行内容存储在一个字符串列表中。参数 file 是要读取的文本文件。参数 charset 指定了读取文本的字符编码。返回一个字符串列表,包含了文本文件的每一行内容。

@Test
public void test7() throws IOException {
    String fileName = "e:/text/test.txt";
    List<String> list = Files.readLines(new File(fileName), Charsets.UTF_8);
    System.out.println(list.size());
}

toByteArray(File file):该方法将给定文件的内容读取为字节数组。参数 file 是要读取的文件。返回一个字节数组,包含了文件的内容。

@Test
public void test8() throws IOException {
    String fileName = "e:/text/test.txt";
    byte[] byteArray = Files.toByteArray(new File(fileName));
}

move(File from, File to):该方法用于将文件移动到新的位置。参数 from 是要移动的源文件。参数 to 是移动后的目标文件。如果目标文件已经存在,则会抛出异常。

@Test
public void test9() throws IOException {
    String fileName = "e:/text/test.txt";
    String targetFileName = "e:/text/son/test.txt";
    Files.createParentDirs(new File(targetFileName));
    Files.move(new File(fileName),new File(targetFileName));
}

createParentDirs(File file):该方法用于创建给定文件的父目录结构。参数 file 是要创建父目录的文件。如果文件的父目录不存在,该方法将尝试创建。

@Test
public void test10() throws IOException {
    String targetFileName = "e:/text/son/test.txt";
    Files.createParentDirs(new File(targetFileName));
}

getFileExtension(String fullName):该方法用于获取给定文件名的扩展名。参数 fullName 是文件名,可以包含路径。返回文件的扩展名(不包含.),如果没有扩展名则返回空字符串。

@Test
public void test11() {
    String targetFileName = "e:/text/son/test.txt";
    String fileExtension = Files.getFileExtension(targetFileName);
    System.out.println(fileExtension);
}

getNameWithoutExtension(String file):该方法用于获取给定文件名的不包含扩展名的部分。参数 file 是文件名,可以包含路径。返回文件名的部分(不包含扩展名)。

@Test
public void test12() {
    String targetFileName = "e:/text/son/test.txt";
    String fileExtension = Files.getNameWithoutExtension(targetFileName);
    System.out.println(fileExtension);
}

Resources

Resources 类的一些核心方法和对应的代码示例梳理:

getResource(String resourceName):该方法用于获取位于类路径下的资源文件的 URL。参数 resourceName 是资源文件的路径,可以是相对路径或绝对路径。返回一个 URL 对象,代表资源文件的位置。

@Test
public void test13() throws IOException {
    URL resource = Resources.getResource("hello.txt");
    String fileName="e:/text/test.txt";
    File file = new File(fileName);
    URL url = file.toURI().toURL();
}

readLines(URL url, Charset charset):该方法从给定的 URL 中读取文本文件的内容,并将每行内容存储在一个字符串列表中。参数 url 是资源文件的 URL。参数 charset 指定了读取文本的字符编码。返回一个字符串列表,包含了文本文件的每一行内容。

@Test
public void test14() throws IOException {
    URL resource = Resources.getResource("hello.txt");
    List<String> list = Resources.readLines(resource, Charsets.UTF_8);
    System.out.println(list.size());

}

toByteArray(URL url):该方法将给定 URL 所代表的文件的内容读取为字节数组。参数 url 是资源文件的 URL。返回一个字节数组,包含了文件的内容。

@Test
public void test15() throws IOException {
    String fileName="e:/text/test2.txt";
    File file = new File(fileName);
    URL url = file.toURI().toURL();
    byte[] byteArray = Resources.toByteArray(url);
    String string = new String(byteArray, Charsets.UTF_8);
    System.out.println(string);
}

asByteSource(URL url):该方法将给定 URL 所代表的文件转换为 ByteSource 对象。参数 url 是资源文件的 URL。返回一个 ByteSource 对象,可以通过该对象进行更复杂的操作,如复制、移动、比较等。

@Test
public void test16() {
    URL resource = Resources.getResource("hello.txt");
    ByteSource byteSource = Resources.asByteSource(resource);
}

copy(URL from, OutputStream to):该方法将给定 URL 所代表的文件的内容复制到输出流中。参数 from 是资源文件的 URL。参数 to 是目标输出流,用于接收复制的内容。

@Test
public void test17() throws IOException {
    URL resource = Resources.getResource("hello.txt");
    OutputStream outputStream=new FileOutputStream("e:/text/test4.txt");
    Resources.copy(resource,outputStream);
}

toString(URL url, Charset charset):该方法将给定 URL 所代表的文件的内容读取为字符串。参数 url 是资源文件的 URL。参数 charset 指定了读取文本的字符编码。返回文件的内容作为字符串。

@Test
public void test18() throws IOException {
    URL resource = Resources.getResource("hello.txt");
    String string = Resources.toString(resource, Charsets.UTF_8);
    System.out.println(string);
}

写在最后

希望这篇文章能够为你提供有关 Guava 的 IO 操作工具的全面指南,让你在处理文件操作时能够更加得心应手。如果你觉得这篇文章对你有所帮助,不妨点个赞并分享给你的朋友。同时,欢迎关注我的公众号(凡夫编程)/博客(凡夫贬夫),获取更多关于技术知识和实用工具的分享。你的支持是我们创作的动力,也是我们分享更多优质内容的动力。谢谢!

文章来源:https://blog.csdn.net/fox9916/article/details/135137460
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。