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. 文件流属性饼状图
下