流概念
流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流两种。I/O流提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。程序的源和目的地可以是键盘、鼠标、内存或显示器窗口等。
输入/输出流
输入流
输出流
File类
File类是java.io包中唯一代表磁盘文件本身的对象。File类定义了一些与平台无关的方法来操作文件,可以通过调用File勒种的方法,实现创建、删除、重命名文件等操作。File类的对象主要用来获取文件本身的一些信息,如文件所在的目录、文件的长度、文件读写权限等。
1.文件的创建
2.获取文件信息
方法 | 返回值 | 说明 |
---|---|---|
getName() | String | 获取文件的名称 |
canRead() | boolean | 获取文件是否为可读的 |
canWrite() | boolean | 获取文件是否可被写入 |
exists() | boolean | 判断文件是否存在 |
length() | long | 获取文件的长度(以字节为单位) |
getAbsolutePath() | String | 获取文件的绝对路径 |
getParent() | String | 获取文件的父路径 |
isFile() | boolean | 判断文件是否存在 |
isDirectory() | boolean | 判断文件是否为一个目录 |
isHidden() | boolean | 判断文件是否为隐藏文件 |
lastModified | long | 获取文件最后修改时间 |
文件输入/输出流
程序运行期间,大部分数据都在内存中进行操作,当程序结束或关闭时,这些数据将消失。如果需要将数据永久保存可使用文件输入/输出流与指定的文件建立连接,将需要的数据永久保存到文件中。
1.FileInputStream与FileOutputStream类
分别继承自InputStream类与OutputStream类,提供了基础的文件读取和写入功能。
虽然Java在程序结束时自动关闭所有打开的流,但是当使用完流后,显式地关闭所有打开的流仍是一个好习惯。一个被打开的流有可能会用尽系统资源,这取决于平台和实现。如果没有将打开的流关闭,当另一个程序试图打开另一个流时,可能会得不到需要的资源。
2.FileReader和FileWriter类
FileInputStream与FileOutputStream类都只提供了对字节或者字节数组的读取方法。由于汉字在文件中占用两个字节,如果使用字节流,读取不好可能会出现乱码现象,此时采用字符流Reader或Writer类即可避免这种现象。
FileReader流顺序地读取文件,只要不关闭流,每次调用read()方法就顺序地读取源中其余的内容,直到源的末尾或流被关闭。
带缓存的输入/输出流
缓存是I/O的一种性能优化。缓存流为I/O流增加了内存缓存区。有了缓存区,使得在流上执行skip()、mark()和reset()方法都成为可能。
1.BufferedInputStream与BufferedOutputStream类
BufferedInputStream类可以对所有InputStream类进行带缓存区的包装以达到性能的优化。
有两个构造方法:
★BufferedInputStream(InputStream in)
★BufferedInputStream(InputStream in, int size)
第一种形式的构造方法创建了一个带有32个字节的缓存流;第二种形式的构造方法按指定的大小来创建缓存区。
一个最优的缓存区的大小,取决于它所在的操作系统、可用的内存空间以及机器配置。
类似的,BufferedOutputStream类也有两个构造方法
BufferedOutputStream类有一个flush()方法用来将缓存区的数据强制输出完。
flush()方法就是用于即使在缓存区没有满的情况下,也将缓存区的内容强制写入到外设,习惯上称这个过程为刷新。flush()方法只对使用缓存区的OutputStream类的子类有效。当调用close()方法时,系统在关闭流之前,也会将缓存区中的信息刷新到磁盘文件中。
2.BufferedReader和BufferedWriter类
分别继承自Reader类和Writer类。这两个类同样也具有内部缓存机制,并可以以行为单位进行输入/输出。
BufferedReader类常用的方法:
read()方法:读取单个字符。
readLine()方法:读取一个文本行,并将其返回为字符串。若无数据可读,则返回null。
BufferedWriter类中的方法返回值都为void。常用的方法:
write(String s,int off,int len)方法:写入字符串的某一部分。
flush()方法:刷新该流的缓存。
newLine()方法:写入一个行分隔符。
数据输入/输出流
数据输入/输出流(DataInputStream类与DataOutputStream类)允许应用程序以与机器无关的方式从底层输入流中读取基本Java数据类型。
ZIP压缩输入/输出流
String |