15.1 输入/输出流
输入/输出流(I/O流)是计算机程序中用于读取和写入数据的一种抽象概念。它们是程序与外部世界(如文件、网络、设备等)通信的通道。输入流负责从外部源读取数据到程序中,而输出流则将程序中的数据发送到外部目标。
输入流提供了方法来逐步地从源获取数据,允许程序逐个读取。输出流则使程序能够逐个地将数据发送到目的地。这种逐步的方式使得处理大量数据变得高效。
I/O流的使用使得程序可以以通用的方式处理不同类型的数据源和目标,例如文件、网络连接、内存等。这为程序提供了灵活性和可扩展性,使其能够适应不同的工作环境和需求。
15.1.1 输入流
InputStream类是字节输入流得抽象类,它是所有字节输入流得父类。InputStream类得具体层次结构如图15.3所示.
Reader类得具体层次结构
15.1.2 输出流
OutputStream类是字节输出流得抽象类,此抽象类是表示输出字节流得所有类得超类。
OutputStream类得具体层次结构:
Writer类是字符输出流的抽象类,所有字符输出类的实现都是子类
15.2 File类
File 类是Java编程语言中的一个重要类,用于表示文件和目录的抽象路径名。它提供了一系列方法,允许程序访问、操作文件系统中的文件和目录,包括创建、删除、重命名等操作,以及获取文件属性信息。File 类为文件和目录的操作提供了便捷的接口,是Java I/O 操作的基础之一。
15.2.1 文件的创建与删除
有三个方法:
1.File(String pathname)
该构造方法通过将给定的路径名字符串转换为抽象路径名来创建一个新的File实例。语法如下:
new File(String pathname)
其中pathname代表路径名称例如:
File file = new File("d://1txt");
2.File(String parent,String child)
该构造方法根据定义的父路径和子路径字符串(包含文件名)创建一个新的File对象,语法如下:
new File(String parent,String child)
3.File(File f,String child)
该抽象方法根据f抽象路径名和child路径名字符串创建一个新File实例。语法如下:
new File(File f,String child)
例题15.1:在D盘创建文本文件
15.2.2 获取文件信息
例题15.2:读取文本文件的名称、长度和隐藏属性
15.3文件输入/输出流
程序运行期间,大部分数据都在内存中进行操作,当程序结束或关闭时,这些数据将消失。如果需要将数据永久保存,可使用文件输入/输出流与指定的文件建立连接,将需要的数据永久保存到文件中。
15.3.1FileInoutSteream与FileOutputStream类
FileInputStream 和 FileOutputStream 是Java I/O流中的两个重要类。
FileInputStream 允许程序从文件中读取字节数据,它提供了一种逐字节读取的方式,可用于读取各种文件类型。
FileOutputStream 允许程序将字节数据写入文件,也是逐字节操作,可以用于向文件中写入内容。
这两个类通常用于处理二进制数据,如图片、音频、视频等。它们提供了对文件的基本读写能力,是Java文件操作的基础。在使用时需要注意异常处理和资源释放,以保证程序的稳定性和可靠性。
例题15.3:向文本文件中写入内容、在读取出来
15.3.2 FileReader和FileWriter类
FileReade类he FileWriter类对应了FileInputStream类和FileOutStream类。FileWriter类顺序地读取文件,只要不关闭流,每次调用read()方法就顺序地读取源中其余内容,知道源的末尾或流被关闭。
例题15.4:使用字符流读写文本文件
15.4 带缓存的输入/输出流
缓存是I/O的一种性能优化。缓存流为I/O流增加了内存缓存区,使得在流上执行skip()、mark()、和reset()方法都成为可能。
15.4.1BufferedInputStream与BufferedOutputStream类
BufferedInputStream类可以对所有InputStream类进行带缓存区的包装以达到性能的优化。
BufferedInputStream 类可以对所有 InputStream 类进行带缓存区的包装以提高性能。它有两个主要构造方法:
BufferedInputStream(InputStream in):接受一个 InputStream 对象作为参数,用于包装该输入流并创建带缓存区的 BufferedInputStream。
BufferedInputStream(InputStream in, int size):除了接受一个 InputStream 对象作为参数外,还可以指定缓存区的大小(以字节为单位)来创建 BufferedInputStream。这允许您自定义缓存区的大小以适应特定需求。
这两个构造方法可用于提高读取输入流的性能,减少了频繁的磁盘或网络访问。缓存区会在内存中保存一定量的数据,以便更高效地从输入流中读取数据。
15.4.2 BufferedReader与BufferedWriter类
BufferedReader类常用方法如下:
read()方法:读取单个字符。
readLine()方法:读取一个文本行,并将其返回为字符串。若无数据可读,则返回null。
BufferedWriter类的方法都返回void。常用方法 :
writer(String s,int off,int len)方法:写入字符串的某一部分.
flush()方法:刷新该流的缓存。
newLine()方法:写入一个行分隔符。
例题15.5:使用缓存流读写文本文件
15.5 数据输入/输出流
数据输入/输出流(Data Input/Output Streams)是Java中用于以二进制格式读写基本数据类型(如int、double、boolean等)的工具。这些流提供了一种在不考虑平台差异的情况下,将数据以二进制形式传输的方法。
DataInputStream:允许程序以二进制格式从输入流中读取基本数据类型。它提供了方法来读取int、double、boolean等。
DataOutputStream:允许程序以二进制格式向输出流中写入基本数据类型。它提供了方法来写入int、double、boolean等。
这使得数据在不同平台和系统之间的传输变得方便,同时保证了数据的准确性。 Data Input/Output Streams 是处理基本数据类型的便捷工具,特别适用于网络通信和文件存储等场景。
例题15.6:使用数据流读写文本文件
结束力