Java案例如何读写本地文件?

wen java案例 8

本文目录导读:

Java案例如何读写本地文件?

  1. 使用 FileReader / FileWriter(字符流,适合文本文件)
  2. 使用 FileInputStream / FileOutputStream(字节流,适合二进制文件)
  3. 使用 Files 工具类(Java 7+,推荐方式)
  4. 使用 Scanner 类(适合读取格式化的文本文件)
  5. 完整案例:复制文件
  6. 选择建议
  7. 注意事项

在Java中读写本地文件有多种方式,我会从最常用到最进阶给你介绍几个典型案例。

使用 FileReader / FileWriter(字符流,适合文本文件)

写文件示例

import java.io.FileWriter;
import java.io.IOException;
public class WriteFileExample {
    public static void main(String[] args) {
        try (FileWriter writer = new FileWriter("output.txt")) {
            writer.write("Hello, World!\n");
            writer.write("这是第二行内容");
            // 注意:FileWriter默认是覆盖模式,追加内容需使用第二个参数为true
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

写文件(追加模式)

try (FileWriter writer = new FileWriter("output.txt", true)) {
    writer.write("\n这是追加的内容");
}

读文件示例

import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
public class ReadFileExample {
    public static void main(String[] args) {
        try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

使用 FileInputStream / FileOutputStream(字节流,适合二进制文件)

写二进制文件

import java.io.FileOutputStream;
import java.io.IOException;
public class WriteBinaryFile {
    public static void main(String[] args) {
        byte[] data = {0x48, 0x65, 0x6C, 0x6C, 0x6F}; // "Hello" 的字节
        try (FileOutputStream fos = new FileOutputStream("binary.dat")) {
            fos.write(data);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

读二进制文件

import java.io.FileInputStream;
import java.io.IOException;
public class ReadBinaryFile {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("binary.dat")) {
            int byteData;
            while ((byteData = fis.read()) != -1) {
                System.out.printf("%02X ", byteData);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

使用 Files 工具类(Java 7+,推荐方式)

写文件

import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;
import java.util.List;
import java.util.Arrays;
public class FilesWriteExample {
    public static void main(String[] args) {
        try {
            // 写入字符串
            Files.write(Paths.get("example.txt"), "Hello, Files!".getBytes());
            // 写入多行
            List<String> lines = Arrays.asList("第一行", "第二行", "第三行");
            Files.write(Paths.get("lines.txt"), lines);
            // 追加内容
            Files.write(Paths.get("example.txt"), "\n追加的内容".getBytes(), 
                       java.nio.file.StandardOpenOption.APPEND);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

读文件

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 {
            // 读取所有内容为字符串
            String content = new String(Files.readAllBytes(Paths.get("example.txt")));
            System.out.println(content);
            // 按行读取
            List<String> lines = Files.readAllLines(Paths.get("lines.txt"));
            for (String line : lines) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

使用 Scanner 类(适合读取格式化的文本文件)

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ScannerReadExample {
    public static void main(String[] args) {
        try (Scanner scanner = new Scanner(new File("data.txt"))) {
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                // 可以按空格分割
                String[] parts = line.split(" ");
                for (String part : parts) {
                    System.out.println(part);
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

完整案例:复制文件

import java.io.*;
public class FileCopyExample {
    public static void copyFile(String source, String dest) throws IOException {
        try (FileInputStream fis = new FileInputStream(source);
             FileOutputStream fos = new FileOutputStream(dest)) {
            byte[] buffer = new byte[1024];
            int length;
            while ((length = fis.read(buffer)) > 0) {
                fos.write(buffer, 0, length);
            }
        }
    }
    public static void main(String[] args) {
        try {
            copyFile("source.txt", "destination.txt");
            System.out.println("文件复制成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

选择建议

  1. 文本文件读写:优先使用 Files 工具类或 BufferedReader/PrintWriter
  2. 二进制文件:使用 FileInputStream/FileOutputStreamFiles 工具类
  3. 大文件处理:使用带缓冲的流(如 BufferedInputStream
  4. 需要随机访问:使用 RandomAccessFile

注意事项

  • 资源管理:始终在 try-with-resources 语句中使用流,确保资源正确关闭
  • 字符编码:明确指定字符编码(如 UTF-8),避免跨平台问题
  • 异常处理:正确处理 IOException
  • 文件路径:注意相对路径和绝对路径的区别

这些是Java中读写文件最常用的方式,根据你的具体需求选择合适的方案即可。

抱歉,评论功能暂时关闭!