1. Java I/O流的基本概念
-
什么是I/O流?
I/O流是指输入输出流,用来处理数据的读取和写入。在Java中,I/O流分为字节流 和字符流,分别处理字节和字符的数据传输。
-
字节流 :用于处理二进制数据,如图片、视频等,常用类是
InputStream
和OutputStream
。 -
字符流 :用于处理文本数据,如
Reader
和Writer
类。 -
示例代码:
InputStream inputStream = new FileInputStream("input.txt"); OutputStream outputStream = new FileOutputStream("output.txt");
在这个例子中,我们分别创建了输入流和输出流来处理文件的读取和写入操作。
-
2. 文件的读取与写入操作(FileInputStream与FileOutputStream)
-
文件读取:
使用
FileInputStream
可以从文件中读取数据,它是字节流的一种,用于处理二进制文件。-
示例代码:
try (FileInputStream fis = new FileInputStream("input.txt")) { int data; while ((data = fis.read()) != -1) { System.out.print((char) data); } } catch (IOException e) { e.printStackTrace(); }
在这里,我们通过
FileInputStream
读取文件内容,并逐字节打印到控制台。 -
-
文件写入:
使用
FileOutputStream
可以将数据写入文件中,它是字节流的输出操作。-
示例代码:
try (FileOutputStream fos = new FileOutputStream("output.txt")) { String content = "Hello, Java I/O!"; fos.write(content.getBytes()); } catch (IOException e) { e.printStackTrace(); }
在这个例子中,我们将字符串写入到
output.txt
文件中,利用了getBytes()
方法将字符串转换为字节数组。 -
3. 缓冲流与数据流的使用
-
缓冲流:
缓冲流通过内部缓冲机制提高了I/O的效率。
BufferedInputStream
和BufferedOutputStream
用于字节流,BufferedReader
和BufferedWriter
用于字符流。-
示例代码:
java 复制代码 try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); }
在这里,我们使用
BufferedReader
来逐行读取文本文件,效率更高。 -
-
数据流:
DataInputStream
和DataOutputStream
可以用于读写基本数据类型,如int
、float
等。-
示例代码:
java 复制代码 try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.txt"))) { dos.writeInt(42); dos.writeDouble(3.14); } catch (IOException e) { e.printStackTrace(); }
在这个例子中,我们通过
DataOutputStream
写入了一个整数和一个双精度数到文件中。 -
4. 对象序列化与反序列化
-
序列化与反序列化的概念:
序列化是指将对象的状态转换为字节流的过程,而反序列化是指从字节流中恢复对象。Java提供了
ObjectOutputStream
和ObjectInputStream
用于对象的序列化和反序列化。-
示例代码:
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.dat"))) { Person person = new Person("John", 30); oos.writeObject(person); } catch (IOException e) { e.printStackTrace(); }
这里,我们将一个
Person
对象序列化并保存到object.dat
文件中。 -
-
反序列化:
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.dat"))) { Person person = (Person) ois.readObject(); System.out.println(person); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); }
在这个例子中,我们从文件中读取了序列化的对象并将其还原为
Person
对象。
5. NIO中的文件操作
-
什么是NIO?
Java NIO(New I/O)是Java提供的一种新的I/O方式,支持非阻塞I/O操作。通过
java.nio
包中的类,Java开发者可以更高效地处理大规模文件操作。-
文件操作示例:
Path path = Paths.get("example.txt"); // 写入文件 Files.write(path, "Hello, NIO!".getBytes()); // 读取文件 List<String> lines = Files.readAllLines(path); lines.forEach(System.out::println);
在这里,我们通过NIO中的
Files
类实现了文件的写入和读取操作,代码更加简洁。 -