Java 中的文件流属性

在 Java 中,文件流是一种用于读取和写入文件的机制。文件流可以分为输入流和输出流,分别用于从文件中读取数据和将数据写入文件。文件流可以根据其功能和用途分为不同的类型。本文将介绍 Java 中常见的文件流属性以及使用示例。

1. 字节流与字符流

Java 中的文件流可以分为字节流和字符流。字节流(Byte Stream)用于处理二进制数据,而字符流(Character Stream)用于处理文本数据。

1.1 字节流

字节流是以字节为单位进行读写的流,可以处理任意类型的数据,包括二进制数据。字节流主要有以下两个类:

  • InputStream:字节输入流,用于从文件中读取字节。
  • OutputStream:字节输出流,用于向文件中写入字节。

以下是使用字节流读取文件的示例代码:

import java.io.*;

public class ByteStreamExample {
    public static void main(String[] args) {
        try {
            File file = new File("example.txt");
            InputStream inputStream = new FileInputStream(file);
            int data;
            while ((data = inputStream.read()) != -1) {
                System.out.print((char) data);
            }
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
1.2 字符流

字符流是以字符为单位进行读写的流,可以处理文本数据。字符流主要有以下两个类:

  • Reader:字符输入流,用于从文件中读取字符。
  • Writer:字符输出流,用于向文件中写入字符。

以下是使用字符流写入文件的示例代码:

import java.io.*;

public class CharacterStreamExample {
    public static void main(String[] args) {
        try {
            File file = new File("example.txt");
            Writer writer = new FileWriter(file);
            String data = "Hello, World!";
            writer.write(data);
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 缓冲流

缓冲流(Buffered Stream)可以提高文件读写的性能,通过在内存中创建缓冲区来减少对硬盘的读写次数。缓冲流可以与字节流和字符流一起使用。

缓冲流主要有以下两对类:

  • BufferedInputStream 和 BufferedOutputStream:字节缓冲流。
  • BufferedReader 和 BufferedWriter:字符缓冲流。

以下是使用缓冲流读写文件的示例代码:

import java.io.*;

public class BufferedStreamExample {
    public static void main(String[] args) {
        try {
            File file = new File("example.txt");
            InputStream inputStream = new FileInputStream(file);
            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
            int data;
            while ((data = bufferedInputStream.read()) != -1) {
                System.out.print((char) data);
            }
            bufferedInputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. 对象流

对象流(Object Stream)可以将对象以二进制的形式读写到文件中,便于对象的持久化和传输。

对象流主要有以下两个类:

  • ObjectInputStream:对象输入流,用于从文件中读取对象。
  • ObjectOutputStream:对象输出流,用于将对象写入文件。

以下是使用对象流读写对象到文件的示例代码:

import java.io.*;

public class ObjectStreamExample {
    public static void main(String[] args) {
        try {
            File file = new File("example.txt");
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file));
            
            // 写入对象
            ExampleObject obj = new ExampleObject("John", 25);
            objectOutputStream.writeObject(obj);
            objectOutputStream.close();
            
            // 读取对象
            ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file));
            ExampleObject readObj = (ExampleObject) objectInputStream.readObject();
            objectInputStream.close();
            
            System.out.println(readObj.getName()); // 输出 "John"
            System.out.println(readObj.getAge()); // 输出 25
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

class ExampleObject implements Serializable {
    private String name;
    private int age;

    public ExampleObject(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

4. 文件流属性饼状图