java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java二进制文件操作

Java文件操作基础之二进制文件的读取与写入

作者:Cache技术分享

二进制文件(Binary File)与文本文件不同,它存储的数据不是可读字符,而是原始字节,本文将和大家详细讲讲如何使用Java读取与写入二进制文件,感兴趣的小伙伴可以了解下

Java读取二进制文件

背景说明

读取二进制文件示例

import java.nio.file.*;
import java.io.*;

public class BinaryFileReadExample {

    public static void main(String[] args) {
        Path file = Paths.get("example.bin"); // 二进制文件路径

        // try-with-resources 自动关闭流
        try (InputStream in = Files.newInputStream(file)) {

            // 将输入流包装成 BufferedInputStream 提高效率
            BufferedInputStream bis = new BufferedInputStream(in);

            byte[] buffer = new byte[1024]; // 每次读取 1024 字节
            int bytesRead;

            while ((bytesRead = bis.read(buffer)) != -1) {
                // bytesRead 表示本次实际读取的字节数
                for (int i = 0; i < bytesRead; i++) {
                    System.out.printf("%02X ", buffer[i]); // 以十六进制打印
                }
                System.out.println();
            }

        } catch (IOException x) {
            System.err.println("读取文件异常: " + x);
        }
    }
}

说明

  1. Files.newInputStream(file) 返回一个 未缓冲的 InputStream
  2. 使用 BufferedInputStream 可以提高读取效率,减少 I/O 调用次数。
  3. 每次读取固定大小的字节数组(buffer),直到返回 -1 表示文件结束。
  4. 可将字节数组打印、保存或进行其他二进制处理。

转换为字符流读取(可选)

如果二进制文件是文本数据,想按行读取,可像这样:

try (InputStream in = Files.newInputStream(file);
     BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"))) {

    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }

} catch (IOException x) {
    System.err.println("读取文本文件异常: " + x);
}

小结

Java写入二进制文件

背景说明

默认行为:如果文件不存在,则创建;如果文件存在,则清空。等价于 CREATE + TRUNCATE_EXISTING

示例代码:写入日志文件

import static java.nio.file.StandardOpenOption.*;
import java.nio.file.*;
import java.io.*;

public class LogFileTest {

    public static void main(String[] args) {
        String s = "Hello World! ";
        byte[] data = s.getBytes(); // 将字符串转换为字节数组
        Path p = Paths.get("./logfile.txt"); // 日志文件路径

        // try-with-resources 自动关闭流
        try (OutputStream out = new BufferedOutputStream(
                Files.newOutputStream(p, CREATE, APPEND))) {

            out.write(data, 0, data.length); // 写入字节数据
            System.out.println("写入完成: " + s);

        } catch (IOException x) {
            System.err.println("写入文件异常: " + x);
        }
    }
}

说明

BufferedOutputStream:用于缓冲写入,提高写入效率,减少磁盘 I/O 调用。

OpenOption 参数:

字节数组写入:

try-with-resources:

扩展示例:多行追加写入

String[] lines = {"第一行日志", "第二行日志", "第三行日志"};
try (OutputStream out = new BufferedOutputStream(
        Files.newOutputStream(p, CREATE, APPEND))) {

    for (String line : lines) {
        out.write((line + System.lineSeparator()).getBytes());
    }

} catch (IOException x) {
    System.err.println(x);
}

小结

创建/写入文件常见方式

BufferedOutputStream vs OutputStream

异常处理

字节流 vs 字符流

到此这篇关于Java文件操作基础之二进制文件的读取与写入的文章就介绍到这了,更多相关Java二进制文件操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文