专业的JAVA编程教程与资源

网站首页 > java教程 正文

五年开发,你还记得Java基础代码中的文件I/O操作么?

temp10 2025-01-06 15:34:44 java教程 11 ℃ 0 评论

文件I/O操作作为Java开发中的一个重要组成部分,主要负责Java代码中对于文件的读写操作,可能对于一些长时间不使用Java文件API的开发者来说早都忘记了相关的操作,下面我们就来详细介绍一下Java中的各种文件I/O操作。

Java文件I/O的基本概念

对于文件的I/O操作无非就是完成如下的两个操作。

五年开发,你还记得Java基础代码中的文件I/O操作么?

  • 读取文件:将文件内容从磁盘加载到程序中。
  • 写入文件:将程序中的数据保存到磁盘文件中。

而在Java中对于文件的I/O操作一般又可以分为两种工作模式,如下所示。

  • 字节流(InputStream 和 OutputStream):处理二进制数据,例如图片、视频等。
  • 字符流(Reader 和 Writer):处理文本数据,例如 .txt 文件。

下面我们就来回忆一下Java中的那些常用的文件操作类。

文件IO的常用类

在Java中提供了很多的操作类来进行文件处理操作,而这些文件操作类一般都包括在java.io和java.nio.file包中,如下所示,展示了一些常用的文件操作类。

File类

File类表示一个文件或者是一个文件目录,这个类只是对文件或者是文件目录的抽象处理,并不直接执行对文件内容的读写操作,而是用来完成如下的一些功能。

  • 创建新文件
  • 删除文件
  • 获取文件信息

代码如下所示。

import java.io.File;
import java.io.IOException;

public class FileExample {
    public static void main(String[] args) {
        File file = new File("example.txt");
        try {
            if (file.createNewFile()) {
                System.out.println("文件已创建:" + file.getName());
            } else {
                System.out.println("文件已存在。");
            }
        } catch (IOException e) {
            System.out.println("创建文件时发生错误。");
            e.printStackTrace();
        }
    }
}

字节流类

在Java中对于文件操作的字节流类被分为了FileInputStream 和 FileOutputStream,主要就是用来通过以字节流的方式来操作文件。如下所示,通过FileInputStream 和 FileOutputStream来实现文件的复制操作。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ByteStreamExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("source.txt");
             FileOutputStream fos = new FileOutputStream("destination.txt")) {
            int data;
            while ((data = fis.read()) != -1) {
                fos.write(data);
            }
            System.out.println("文件复制完成!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

字符流类

当然除了字节流之外,在Java中还提供了字符流操作类,如下所示,常见的字符流文件操作类有如下两个FileReader 和 FileWriter,主要的作用就是以字符流的方式实现文本文件读写操作。如下所示实现读取文件并写入另一个文件中。

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class CharStreamExample {
    public static void main(String[] args) {
        try (FileReader reader = new FileReader("input.txt");
             FileWriter writer = new FileWriter("output.txt")) {
            int data;
            while ((data = reader.read()) != -1) {
                writer.write(data);
            }
            System.out.println("文本文件复制完成!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

使用缓冲流提高效率

在文件流操作的过程中,我们可以通过数据缓冲区来提升对于文件的读写效率,如下所示。是日常开发中常见的一些文件缓冲类和操作介绍。

  • BufferedReader 和 BufferedWriter:用于高效处理字符数据。
  • BufferedInputStream 和 BufferedOutputStream:用于高效处理字节数据。

下面我们演示一下如何通过BufferedReader 和 BufferedWriter来实现文件的读写操作。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedStreamExample {
    public static void main(String[] args) {
        try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
             BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
            String line;
            while ((line = reader.readLine()) != null) {
                writer.write(line);
                writer.newLine();
            }
            System.out.println("文件内容已成功复制!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

java.nio.file 包中的文件操作

在Java7之后引入了NIO操作的文件操作包java.nio.file,提供了基于NIO模型的文件操作类,例如比较常用的Files和Paths类都是在这个包中。如下所示,我们通过一个小例子来看看如何通过NIO包中的类来读取整个的文件内容。

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class NIOExample {
    public static void main(String[] args) {
        try {
            List<String> lines = Files.readAllLines(Paths.get("input.txt"));
            lines.forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

我们也可以直接通过Files.copy()来实现文件的拷贝操作,如下所示。

import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;

public class NIOCopyExample {
    public static void main(String[] args) {
        try {
            Files.copy(Paths.get("source.txt"), Paths.get("destination.txt"));
            System.out.println("文件复制完成!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

文件IO的常见错误处理

在进行文件操作的时候无非就是文件找不到,文件操作异常读写异常等一些常见的异常处理。如下所示。

  • 文件未找到异常:FileNotFoundException
  • 权限不足异常:SecurityException
  • IO 异常:IOException

在实现文件操作的时候,我们需要根据文件类型选择合适的文件操作流来实现文件操作,提供缓冲流来提升文件的读写性能,再加上完整的文件异常检查方案,就可以保证高效的文件IO操作。

总结

在Java中提供了很多的文件处理的I/O操作类,从传统的File类和流操作到现代的java.nio.file工具类都是非常好的文件操作支持,开发者可以根据具体的的操作来选择合适的实现方案,在实际开发中也是一样,可能长时间不使用某种技术,会对相关的技术实现有所忘记变得陌生,所以适当的时间回忆一下相关的基础操作,也是对自己能力的提升。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表