Java输入输出流详解:File类与字节流、字符流

需积分: 15 2 下载量 110 浏览量 更新于2024-07-25 收藏 1.02MB PPT 举报
"Java输入输出流" 在Java编程中,输入输出流(Input/Output,简称I/O)是处理数据传输的核心概念,它涵盖了对各种设备和环境的数据输入和输出操作。Java通过抽象化为流对象来简化这些问题,提供了丰富的流类库来处理不同类型的I/O操作。 **6.1 File类** File类是Java中的核心类,位于java.io包中,它用于文件和目录的创建、删除、重命名以及获取文件属性等操作。File对象代表了操作系统中的一个实际文件或目录路径。以下是一些File类的基本方法和应用: - `createNewFile()`:创建一个新的空文件,如果文件已存在则返回false。 - `exists()`:检查文件或目录是否存在。 - `delete()`:删除文件或目录。 - `renameTo(File dest)`:将文件或目录重命名为指定的新名称。 - `isDirectory()`和`isFile()`:判断文件是否为目录或普通文件。 - `listFiles()`:返回目录下的所有文件和子目录。 File类还可以用来获取文件的大小、修改时间、创建时间等信息。 **6.1.1 File类概述** File类主要分为三类文件类型: 1. **顺序文件(SequentialFile)**,也称为文本文件,记录按顺序排列,读写时需按顺序逐个进行,通常以换行符分隔记录。 2. **随机文件(RandomAccessFile)**,允许直接访问文件中的任意位置,适用于读取和写入固定长度记录的文本或二进制文件。 3. **二进制文件**,非文本格式,通常用于存储图像、音频、视频等复杂数据。 **流的概念** Java的流模型将数据的输入和输出过程看作数据流的流动,分为输入流(InputStream和Reader)和输出流(OutputStream和Writer)。流分为字节流(处理单个字节)和字符流(处理Unicode字符)。 - **字节流**:包括`InputStream`和`OutputStream`的子类,如`FileInputStream`和`FileOutputStream`,用于处理二进制数据,如图片、音频等。 - **字符流**:包括`Reader`和`Writer`的子类,如`FileReader`和`FileWriter`,用于处理文本数据。 **流的使用** 使用流时,通常遵循“打开流 -> 处理数据 -> 关闭流”的模式。例如,使用FileInputStream读取文件: ```java FileInputStream fis = new FileInputStream("file.txt"); byte[] buffer = new byte[1024]; int read; while ((read = fis.read(buffer)) != -1) { // 处理读取的数据 } fis.close(); ``` 同样,使用FileOutputStream写入文件: ```java FileOutputStream fos = new FileOutputStream("file.txt"); byte[] data = ...; // 要写入的数据 fos.write(data); fos.close(); ``` **随机流的应用** `RandomAccessFile`类提供了随机访问文件的能力,可以在文件的任何位置读写数据。使用它时,需要指定文件模式,如“rw”表示读写: ```java RandomAccessFile raf = new RandomAccessFile("file", "rw"); raf.seek(100); // 移动到文件的第100字节位置 raf.writeByte((byte) 65); // 写入一个字节 raf.seek(0); // 回到文件开头 int byteRead = raf.read(); // 读取第一个字节 raf.close(); ``` **图形化程序的数据读取和写入** 在GUI应用程序中,可以使用输入输出流处理用户界面与文件之间的数据交换。例如,使用JFileChooser选择文件后,可以创建File对象,然后用FileInputStream读取或FileOutputStream写入数据。 Java的I/O流体系结构丰富,覆盖了多种场景和需求,为开发者提供了强大而灵活的数据传输工具。通过深入理解和熟练运用这些概念和类,可以有效地处理各种输入输出任务。