A.输入输出流
java的i/o 流分为两类
在Java中,I/O(输入/输出)流主要分为两大类:字节流(Byte Stream)和字符流(Character Stream)。这两种流分别用于处理字节数据和字符数据,提供了灵活的方式来处理不同类型的数据。
1.字节流
字节流(Byte Stream):
- InputStream:字节输入流的抽象基类,用于从各种数据源读取字节。
- OutputStream:字节输出流的抽象基类,用于向各种目标写入字节。
InputStream inputStream = new FileInputStream("example.txt");
OutputStream outputStream = new FileOutputStream("output.txt");
2.字符流
字符流(Character Stream):
- Reader:字符输入流的抽象基类,用于从各种数据源读取字符。
- Writer:字符输出流的抽象基类,用于向各种目标写入字符
Reader reader = new FileReader("example.txt");
Writer writer = new FileWriter("output.txt");
输入流
Java的输入流用于从数据源(如文件、网络连接、内存等)读取数据。输入流通常用于读取字节或字符数据,
InputStream(字节输入流):
-
FileInputStream
: 从文件中读取字节流。 -
ByteArrayInputStream
: 从字节数组中读取字节流。 -
ObjectInputStream
: 从输入流中读取对象。
InputStream inputStream = new FileInputStream("example.txt");
Reader(字符输入流):
-
FileReader
: 从文件中读取字符流。 -
StringReader
: 从字符串中读取字符流。 -
BufferedReader
: 提供缓冲功能,可以提高读取效率。
Reader reader = new FileReader("example.txt");
import java.io.*;
public class InputStreamExample {
public static void main(String[] args) {
try {
InputStream input = new FileInputStream("example.txt");
int data;
while ((data = input.read()) != -1) {
System.out.print((char) data);
}
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出流
Java的输出流用于将数据写入目标(如文件、网络连接、内存等)。输出流通常用于写入字节或字符数据,
OutputStream(字节输出流):
-
FileOutputStream
: 向文件中写入字节流。 -
ByteArrayOutputStream
: 向字节数组中写入字节流。 -
ObjectOutputStream
: 将对象写入输出流。
OutputStream outputStream = new FileOutputStream("output.txt");
Writer(字符输出流):
-
FileWriter
: 向文件中写入字符流。 -
StringWriter
: 将字符写入字符串。 -
BufferedWriter
: 提供缓冲功能,可以提高写入效率。
Writer writer = new FileWriter("output.txt");
import java.io.*;
public class OutputStreamExample {
public static void main(String[] args) {
try {
OutputStream output = new FileOutputStream("output.txt");
String data = "Hello, Java I/O!";
byte[] bytes = data.getBytes();
output.write(bytes);
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
B.File类
在Java中,File
类是用于表示文件和目录路径名的抽象。它可以用于创建、删除、重命名文件或目录,查询文件或目录的属性等。File
类并不实际读取或写入文件数据,它主要用于操作文件系统中的文件和目录结构。
例题1在指定盘目录创建文本文件
C.文件的输入输出流
输入流
使用字节输入流(InputStream
):
try (InputStream inputStream = new FileInputStream("example.txt")) {
int data;
while ((data = inputStream.read()) != -1) {
// 处理读取的字节数据
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
使用字符输入流(Reader
):
try (Reader reader = new FileReader("example.txt")) {
int data;
while ((data = reader.read()) != -1) {
// 处理读取的字符数据
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
输出流
使用字节输出流(OutputStream
):
try (OutputStream outputStream = new FileOutputStream("output.txt")) {
String data = "Hello, World!";
byte[] bytes = data.getBytes();
outputStream.write(bytes);
} catch (IOException e) {
e.printStackTrace();
}
使用字符输出流(Writer
):
try (Writer writer = new FileWriter("output.txt")) {
String data = "Hello, World!";
writer.write(data);
} catch (IOException e) {
e.printStackTrace();
}
例题2
例题3
D.带缓存的输入/输出流
Java中,可以使用带缓存的输入/输出流来提高读写性能。这些流使用内部缓冲区,以减少实际的物理读写操作,从而提高效率。
带缓存的输入流:
- BufferedInputStream:
try (BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("example.txt"))) {
int data;
while ((data = bufferedInputStream.read()) != -1) {
// 处理读取的字节数据
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
BufferedReader:
try (BufferedReader bufferedReader = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = bufferedReader.readLine()) != null) {
// 处理读取的一行字符数据
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
带缓存的输出流:
BufferedOutputStream:
try (BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("output.txt"))) {
String data = "Hello, World!";
byte[] bytes = data.getBytes();
bufferedOutputStream.write(bytes);
} catch (IOException e) {
e.printStackTrace();
}
BufferedWriter:
try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("output.txt"))) {
String data = "Hello, World!";
bufferedWriter.write(data);
} catch (IOException e) {
e.printStackTrace();
}
例题4
E.数据输入/输出流
Java中,数据输入/输出流是用于进行数据的高级读写操作的流。它们通常被用于读写复杂的数据结构,如对象或基本数据类型的序列
数据输入流:
DataInputStream:
try (DataInputStream dataInputStream = new DataInputStream(new FileInputStream("data.dat"))) {
int intValue = dataInputStream.readInt();
double doubleValue = dataInputStream.readDouble();
// 读取其他基本数据类型
} catch (IOException e) {
e.printStackTrace();
}
数据输出流:
DataOutputStream:
try (DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("data.dat"))) {
int intValue = 42;
double doubleValue = 3.14;
dataOutputStream.writeInt(intValue);
dataOutputStream.writeDouble(doubleValue);
// 写入其他基本数据类型
} catch (IOException e) {
e.printStackTrace();
}
这些流允许你以二进制形式读写 Java 的基本数据类型,而不用担心平台差异或手动进行数据转换 DataInputStream
和 DataOutputStream
通常用于配合其他输入/输出流,如 FileInputStream
和 FileOutputStream
。
最后的