目录
FileInputStream 和 FileOutputStream
ObjectInputStream 和 ObjectOutputStream
全面解析 Java IO 常见类的使用
Java IO 是 Java 核心库的重要组成部分,用于处理各种输入和输出操作。本文将介绍 Java IO 中常见类的使用,包括磁盘操作、字节操作、字符操作、对象操作和网络操作。通过这些示例,您可以更好地理解和应用 Java IO。
磁盘操作
File 类
File
类用于表示文件和目录路径,并提供了丰富的方法来操作文件和目录。
创建文件和目录
import java.io.File;
import java.io.IOException;
public class FileExample {
public static void main(String[] args) {
File file = new File("example.txt");
File dir = new File("exampleDir");
try {
if (file.createNewFile()) {
System.out.println("File created: " + file.getName());
} else {
System.out.println("File already exists.");
}
if (dir.mkdir()) {
System.out.println("Directory created: " + dir.getName());
} else {
System.out.println("Directory already exists.");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
列出目录中的文件
import java.io.File;
public class FileExample {
public static void main(String[] args) {
File dir = new File("exampleDir");
if (dir.exists() && dir.isDirectory()) {
String[] files = dir.list();
if (files != null) {
for (String file : files) {
System.out.println(file);
}
}
}
}
}
字节操作
FileInputStream 和 FileOutputStream
FileInputStream
和 FileOutputStream
类用于读取和写入文件中的字节数据。
读取文件中的字节数据
import java.io.FileInputStream;
import java.io.IOException;
public class ByteStreamExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("example.txt")) {
int data;
while ((data = fis.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
将字节数据写入文件
import java.io.FileOutputStream;
import java.io.IOException;
public class ByteStreamExample {
public static void main(String[] args) {
String data = "Hello, Byte Stream!";
try (FileOutputStream fos = new FileOutputStream("example.txt")) {
fos.write(data.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
字符操作
FileReader 和 FileWriter
FileReader
和 FileWriter
类用于读取和写入文件中的字符数据。
读取文件中的字符数据
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class CharacterStreamExample {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
将字符数据写入文件
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class CharacterStreamExample {
public static void main(String[] args) {
String data = "Hello, Character Stream!";
try (BufferedWriter bw = new BufferedWriter(new FileWriter("example.txt"))) {
bw.write(data);
} catch (IOException e) {
e.printStackTrace();
}
}
}
对象操作
ObjectInputStream 和 ObjectOutputStream
ObjectInputStream
和 ObjectOutputStream
类用于序列化和反序列化对象。
序列化对象
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class ObjectStreamExample {
public static void main(String[] args) {
Person person = new Person("John", 30);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
oos.writeObject(person);
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + '}';
}
}
反序列化对象
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class ObjectStreamExample {
public static void main(String[] args) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
Person person = (Person) ois.readObject();
System.out.println(person);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
网络操作
Socket 和 ServerSocket
Socket
和 ServerSocket
类用于实现网络通信。
创建一个简单的服务器
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerExample {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(8080)) {
System.out.println("Server is listening on port 8080");
while (true) {
Socket socket = serverSocket.accept();
OutputStream output = socket.getOutputStream();
output.write("Hello, Client!".getBytes());
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
创建一个简单的客户端
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class ClientExample {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 8080)) {
InputStream input = socket.getInputStream();
int data;
while ((data = input.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
总结
在这篇博客文章中,我们全面介绍了 Java IO 中常见类的使用,包括磁盘操作、字节操作、字符操作、对象操作和网络操作。通过这些示例,您可以更好地理解和应用 Java IO,以便在实际项目中高效地处理各种输入和输出操作。希望这篇文章对您有所帮助,能够让您在 Java IO 的学习和使用中更加得心应手。
如果您有任何问题或建议,请在评论区留言。谢谢阅读!
希望这篇博客文章对您有帮助!如果您有任何问题或需要进一步的帮助,请随时告诉我。