Java I/O流典型用法详解:从文件到内存操作

1 下载量 78 浏览量 更新于2024-09-01 收藏 87KB PDF 举报
"Java I/O中的I/O流是程序与外部数据交互的重要工具,包括从文件、内存等来源读取和向目标写入数据。本文深入解析了Java I/O流的一些典型使用方式,旨在提供基础的参考实例。" 在Java I/O系统中,流(Stream)是处理数据的一系列有序的字节或者字符序列。它们可以用来从各种源读取数据,如文件、网络连接,也可以向不同的目的地写入数据。下面我们将详细探讨几种常见的I/O流使用场景。 1. 缓冲输入文件 缓冲输入流可以显著提高读取文件的效率。在Java中,我们通常使用`BufferedReader`配合`FileReader`来实现。例如: ```java public class BufferedInputFile { public static String read(String fileName) throws Exception { BufferedReader br = new BufferedReader(new FileReader(fileName)); StringBuilder str = new StringBuilder(); String temp = null; while ((temp = br.readLine()) != null) { str.append(temp + "\n"); } br.close(); return str.toString(); } public static void main(String[] args) { try { System.out.println(BufferedInputFile.read("pom.xml")); } catch (Exception e) { e.printStackTrace(); } } } ``` 在这个例子中,`BufferedReader`的`readLine()`方法用于逐行读取文件内容,直到文件末尾。读取完成后,记得调用`close()`关闭流,防止资源泄露。 2. 从内存输入 有时我们可能需要从内存中读取数据,这时可以使用`StringReader`类。例如: ```java String data = "Memory data"; StringReader sr = new StringReader(data); char[] buffer = new char[10]; int n = 0; while ((n = sr.read(buffer)) != -1) { System.out.write(buffer, 0, n); } sr.close(); ``` 这段代码创建了一个`StringReader`,然后使用`read()`方法读取内存中的数据并打印出来。 3. 格式的内存输入 如果需要格式化地从内存输入,可以结合`Scanner`类使用。`Scanner`可以从`String`、`InputStream`等源读取数据,并支持多种数据类型。 4. 基本的文件输出 对于文件输出,`FileWriter`和`BufferedWriter`常被用来创建文本文件。例如: ```java public static void writeToFile(String fileName, String content) throws IOException { BufferedWriter bw = new BufferedWriter(new FileWriter(fileName)); bw.write(content); bw.close(); } ``` 5. 存储和恢复数据 Java提供了序列化机制来存储和恢复对象。通过实现`Serializable`接口,对象可以被序列化成字节流,然后写入文件。恢复时反序列化即可。 6. 读写随机访问文件 `RandomAccessFile`允许在文件的任何位置进行读写操作。这对于需要频繁跳转到文件不同位置读写的场景非常有用。 7. 实用工具 Java标准库提供了许多有用的工具类,如`Files`、`Charsets`等,可以方便地进行文件操作,如复制、移动、读取文件内容等。 总结,Java I/O流提供了丰富的类和方法来处理各种数据输入输出需求。理解和熟练掌握这些典型用法,能够帮助开发者高效地处理数据交换问题。在实际编程中,还需要根据具体场景选择适当的流类型,并进行合理的异常处理和资源管理。