用Java实现文件读写操作的完整指南

时间:2025-02-18 12:29:25

在Java中,文件读写操作是常见的任务。Java提供了多种方式来实现文件的读取和写入操作。本指南将详细介绍如何使用Java进行文件的读写操作,包括使用FileInputStream/FileOutputStreamBufferedReader/BufferedWriterFiles类等。

1. 使用 FileInputStreamFileOutputStream 进行字节流读写

1.1 文件读取 (FileInputStream)

FileInputStream 是用于从文件中读取字节流的类。它适用于读取二进制文件(如图片、音频等)或文本文件。

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

public class FileInputStreamExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("input.txt")) {
            int content;
            // 每次读取一个字节,直到文件末尾
            while ((content = fis.read()) != -1) {
                System.out.print((char) content);  // 将字节转换为字符并打印
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

1.2 文件写入 (FileOutputStream)

FileOutputStream 是用于向文件中写入字节流的类。它适用于写入二进制文件或文本文件。

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

public class FileOutputStreamExample {
    public static void main(String[] args) {
        String data = "Hello, World!";
        try (FileOutputStream fos = new FileOutputStream("output.txt")) {
            // 将字符串转换为字节数组并写入文件
            byte[] bytes = data.getBytes();
            fos.write(bytes);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 使用 BufferedReaderBufferedWriter 进行字符流读写

2.1 文件读取 (BufferedReader)

BufferedReader 是用于高效读取字符流的类,通常与 FileReader 结合使用。它适用于读取文本文件。

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

public class BufferedReaderExample {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("input.txt"))) {
            String line;
            // 每次读取一行,直到文件末尾
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2.2 文件写入 (BufferedWriter)

BufferedWriter 是用于高效写入字符流的类,通常与 FileWriter 结合使用。它适用于写入文本文件。

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

public class BufferedWriterExample {
    public static void main(String[] args) {
        String data = "Hello, World!";
        try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
            // 写入字符串到文件
            bw.write(data);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. 使用 Files 类进行文件读写

Files 类是 Java 7 引入的一个工具类,提供了许多静态方法来简化文件操作。它可以用于读取整个文件的内容或将内容写入文件。

3.1 文件读取 (Files.readAllLines)

Files.readAllLines 方法可以一次性读取文件的所有行,并将其存储在一个 List<String> 中。

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

public class FilesReadExample {
    public static void main(String[] args) {
        try {
            // 读取文件的所有行
            List<String> lines = Files.readAllLines(Paths.get("input.txt"));
            for (String line : lines) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3.2 文件写入 (Files.write)

Files.write 方法可以将一组字符串写入文件。

import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class FilesWriteExample {
    public static void main(String[] args) {
        List<String> lines = Arrays.asList("Hello", "World");
        try {
            // 将字符串列表写入文件
            Files.write(Paths.get("output.txt"), lines);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4. 使用 Scanner 类进行文件读取

Scanner 类不仅可以用于从控制台读取输入,还可以用于从文件中读取数据。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ScannerExample {
    public static void main(String[] args) {
        try (Scanner scanner = new Scanner(new File("input.txt"))) {
            // 每次读取一行,直到文件末尾
            while (scanner.hasNextLine()) {
                System.out.println(scanner.nextLine());
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

5. 使用 PrintWriter 进行文件写入

PrintWriter 是一个非常方便的类,允许你以类似于 System.out.println 的方式写入文件。

import java.io.PrintWriter;
import java.io.FileWriter;
import java.io.IOException;

public class PrintWriterExample {
    public static void main(String[] args) {
        try (PrintWriter pw = new PrintWriter(new FileWriter("output.txt"))) {
            // 使用 println 方法写入文件
            pw.println("Hello, World!");
            pw.println("This is a test.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

6. 处理异常

在进行文件读写操作时,可能会遇到各种异常,例如文件不存在、权限不足等。因此,必须正确处理这些异常。通常使用 try-catch 块来捕获和处理异常。

try {
    // 文件读写操作
} catch (IOException e) {
    e.printStackTrace();
}

7. 使用 try-with-resources 自动关闭资源

Java 7 引入了 try-with-resources 语法,可以在 try 语句结束后自动关闭资源,避免手动调用 close() 方法。

try (BufferedReader br = new BufferedReader(new FileReader("input.txt"))) {
    // 文件读取操作
} catch (IOException e) {
    e.printStackTrace();
}

总结

  • 字节流:使用 FileInputStreamFileOutputStream 进行字节级别的读写操作,适用于二进制文件。
  • 字符流:使用 BufferedReaderBufferedWriter 进行字符级别的读写操作,适用于文本文件。
  • Files 类:使用 Files.readAllLinesFiles.write 可以简化文件的读写操作。
  • Scanner 和 PrintWriterScanner 适合逐行读取文件,PrintWriter 适合格式化输出到文件。
  • 异常处理:在文件操作中要始终处理可能的 IOException
  • 资源管理:使用 try-with-resources 自动管理资源,确保文件流在使用后被正确关闭。

通过以上方法,你可以根据具体需求选择合适的文件读写方式。

相关文章