FileInputStream
、BufferedReader
。FileOutputStream
、BufferedWriter
。InputStream
和 OutputStream
。Reader
和 Writer
。FileInputStream
、FileReader
。BufferedInputStream
、CipherOutputStream
。InputStream
它是所有字节输入流的抽象基类,定义了读取字节数据的基本方法,如 read()
用于读取一个字节,read(byte[] b)
用于读取多个字节到字节数组中。
OutputStream
它是所有字节输出流的抽象基类,定义了写入字节数据的基本方法,如 write(int b)
用于写入一个字节,write(byte[] b)
用于写入字节数组。
FileInputStream
和 FileOutputStream
复制图片import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ByteStreamCopyImage {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("source.jpg");
FileOutputStream fos = new FileOutputStream("destination.jpg")) {
int byteRead;
while ((byteRead = fis.read()) != -1) {
fos.write(byteRead);
}
System.out.println("图片复制成功");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Reader
它是所有字符输入流的抽象基类,定义了读取字符数据的基本方法,如 read()
用于读取一个字符,read(char[] cbuf)
用于读取多个字符到字符数组中。
Writer
它是所有字符输出流的抽象基类,定义了写入字符数据的基本方法,如 write(int c)
用于写入一个字符,write(char[] cbuf)
用于写入字符数组。
FileReader
和 FileWriter
复制文本文件import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class CharacterStreamCopyText {
public static void main(String[] args) {
try (FileReader fr = new FileReader("source.txt");
FileWriter fw = new FileWriter("destination.txt")) {
int charRead;
while ((charRead = fr.read()) != -1) {
fw.write(charRead);
}
System.out.println("文本文件复制成功");
} catch (IOException e) {
e.printStackTrace();
}
}
}
BufferedInputStream
:对 InputStream
进行包装,提供缓冲功能,减少与数据源的交互次数,提高读取效率。BufferedOutputStream
:对 OutputStream
进行包装,提供缓冲功能,减少与目的地的交互次数,提高写入效率。BufferedReader
:对 Reader
进行包装,提供缓冲功能,还提供了 readLine()
方法用于读取一行文本。BufferedWriter
:对 Writer
进行包装,提供缓冲功能,还提供了 newLine()
方法用于写入换行符。BufferedReader
和 BufferedWriter
逐行复制文本文件import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedStreamCopyText {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("source.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("destination.txt"))) {
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
}
System.out.println("文本文件逐行复制成功");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ObjectInputStream
和 ObjectOutputStream
用于实现对象的序列化和反序列化。序列化是将对象转换为字节序列,反序列化是将字节序列恢复为对象。要实现序列化,对象的类必须实现 Serializable
接口。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Student implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class ObjectStreamExample {
public static void main(String[] args) {
// 序列化对象
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("student.ser"))) {
Student student = new Student("Alice", 20);
oos.writeObject(student);
System.out.println("对象序列化成功");
} catch (IOException e) {
e.printStackTrace();
}
// 反序列化对象
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("student.ser"))) {
Student student = (Student) ois.readObject();
System.out.println("对象反序列化成功");
System.out.println("Name: " + student.getName());
System.out.println("Age: " + student.getAge());
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
File
类用于表示文件或目录的抽象路径名,可以进行文件和目录的创建、删除、重命名等操作。
import java.io.File;
import java.io.IOException;
public class FileOperationExample {
public static void main(String[] args) {
// 创建目录
File dir = new File("testDir");
if (dir.mkdir()) {
System.out.println("目录创建成功");
} else {
System.out.println("目录创建失败");
}
// 创建文件
File file = new File(dir, "testFile.txt");
try {
if (file.createNewFile()) {
System.out.println("文件创建成功");
} else {
System.out.println("文件创建失败");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Socket
和 ServerSocket
用于实现 TCP 网络通信。Socket
用于客户端与服务器建立连接,ServerSocket
用于服务器监听客户端的连接请求。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
// 服务器端
class TCPServer {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true)) {
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println("客户端发送的消息: " + inputLine);
out.println("服务器已收到消息: " + inputLine);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 客户端
class TCPClient {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 8888);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in))) {
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("服务器响应: " + in.readLine());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上是I/O多个方面,希望能使你更好的了解与熟练的进行I/O的数据输入与输出