Java IO
一,什么是Java io 流
1.介绍
Java I/O(Input/Output)流是Java中处理输入和输出的机制。它提供了一种统一的方式来读取和写入各种类型的数据,包括字节、字符、对象等。I/O流是Java程序与外部世界进行交互的关键组件之一。
Java I/O流分为两类:字节流(Byte Streams)和字符流(Character Streams)。
字节流(Byte Streams):
- InputStream:字节输入流的抽象基类,用于读取字节数据。
- OutputStream:字节输出流的抽象基类,用于写入字节数据。
- FileInputStream:从文件中读取字节的输入流。
- FileOutputStream:向文件中写入字节的输出流。
- BufferedInputStream / BufferedOutputStream:提供缓冲功能的字节输入流和输出流。
- DataInputStream / DataOutputStream:允许以Java基本类型进行读写的字节输入流和输出流。
字符流(Character Streams):
- Reader:字符输入流的抽象基类,用于读取字符数据。
- Writer:字符输出流的抽象基类,用于写入字符数据。
- FileReader:从文件中读取字符的输入流。
- FileWriter:向文件中写入字符的输出流。
- BufferedReader / BufferedWriter:提供缓冲功能的字符输入流和输出流。
- InputStreamReader / OutputStreamWriter:将字节流转换为字符流的桥梁。
- PrintWriter:提供格式化的输出功能的字符输出流。
此外,Java还提供了一系列其他类型的流,如对象流(ObjectStreams)、管道流(PipeStreams)等,用于处理特定的数据类型或应用场景。
通过使用Java I/O流,我们可以从文件、网络、系统控制台等来源读取数据,并将数据写入文件、网络、标准输出等目标。这使得Java程序能够与外部环境进行数据交换和持久化操作。
2.使用原因
Java I/O流的使用具有以下几个重要原因:
数据传输:I/O流提供了一种方便的方式来处理数据的输入和输出。通过使用I/O流,我们可以从文件、网络、键盘等输入源读取数据,并将数据写入文件、网络、标准输出等输出目标。这使得我们能够与外部环境进行数据交互和传输。
数据持久化:使用I/O流可以将数据持久化到硬盘或其他存储介质中。通过将数据写入文件,我们可以在程序关闭后仍然保留数据,以便下次使用时进行读取。
数据处理:I/O流提供了一种逐个字节或逐个字符处理数据的方式。这使得我们可以方便地对数据进行处理、解析和转换。例如,可以使用字节流或字符流读取文本文件并逐行处理其中的内容。
网络通信:Java的I/O流还支持网络通信。通过使用套接字(Socket)类,我们可以创建客户端和服务器之间的网络连接,并通过流读取和写入数据进行通信。
缓冲功能:I/O流提供了缓冲区的支持,可以提高读写的效率。通过使用缓冲流(如BufferedReader和BufferedWriter),我们可以减少实际访问I/O设备的次数,从而提高性能。
多种数据类型支持:Java I/O流提供了不同类型的流来处理不同类型的数据。除了基本的字节流和字符流,还有对象流(ObjectStreams)用于序列化和反序列化对象,以及其他特定类型的流用于处理二进制数据等。
总之,Java I/O流是处理输入和输出的一种重要机制,它提供了一种统一和灵活的方式来读取和写入不同类型的数据。通过使用I/O流,我们可以实现数据传输、持久化、处理和网络通信,使得Java程序能够与外部环境进行数据交互和操作。
二,示例代码
下面是关于Java IO流中的InputStream
,OutputStream
,FileInputStream
,FileOutputStream
的示例代码:
- 使用
InputStream
和OutputStream
读取和写入字节数据:
import java.io.*;
public class ByteStreamExample {
public static void main(String[] args) {
try {
InputStream inputStream = new FileInputStream("input.txt");
OutputStream outputStream = new FileOutputStream("output.txt");
int byteData;
while ((byteData = inputStream.read()) != -1) {
outputStream.write(byteData);
}
inputStream.close();
outputStream.close();
System.out.println("File copied successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 使用
FileInputStream
和FileOutputStream
读取和写入文件:
import java.io.*;
public class FileReadWriteExample {
public static void main(String[] args) {
try {
FileInputStream fileInputStream = new FileInputStream("input.txt");
FileOutputStream fileOutputStream = new FileOutputStream("output.txt");
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, bytesRead);
}
fileInputStream.close();
fileOutputStream.close();
System.out.println("File copied successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
下面是使用Java IO流中的字符流FileReader
,FileWriter
,BufferedReader
/BufferedWriter
,InputStreamReader
/OutputStreamWriter
的示例代码:
- 使用
FileReader
和FileWriter
读取和写入文本文件:
import java.io.*;
public class CharacterStreamExample {
public static void main(String[] args) {
try {
FileReader fileReader = new FileReader("input.txt");
FileWriter fileWriter = new FileWriter("output.txt");
int charData;
while ((charData = fileReader.read()) != -1) {
fileWriter.write(charData);
}
fileReader.close();
fileWriter.close();
System.out.println("File copied successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 使用
BufferedReader
和BufferedWriter
读取和写入文本文件:
import java.io.*;
public class BufferedCharacterStreamExample {
public static void main(String[] args) {
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader("input.txt"));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("output.txt"));
String line;
while ((line = bufferedReader.readLine()) != null) {
bufferedWriter.write(line);
bufferedWriter.newLine();
}
bufferedReader.close();
bufferedWriter.close();
System.out.println("File copied successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 使用
InputStreamReader
和OutputStreamWriter
进行字节流到字符流的转换:
import java.io.*;
public class ByteToCharacterStreamExample {
public static void main(String[] args) {
try {
FileInputStream fileInputStream = new FileInputStream("input.txt");
FileOutputStream fileOutputStream = new FileOutputStream("output.txt");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
int charData;
while ((charData = inputStreamReader.read()) != -1) {
outputStreamWriter.write(charData);
}
inputStreamReader.close();
outputStreamWriter.close();
System.out.println("File copied successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
请注意,在实际应用中,需要确保及时关闭流和正确处理异常。以上代码仅作为示例,实际使用时需要根据实际需求进行适当的优化和异常处理。