(一)流概述
1.流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流两种。
2.虽然I/O流通常与磁盘文件存取有关,但是程序的源和目的地也可以是键盘、鼠标、内存、或显示器窗口等。
(二)输入/输出流
Java语言定义了许多类专门负责各种方式的输入/输出,这些类都被放在java.io包中。其中所有输入类都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类;而所有输出类都是抽象类OutputStream(字节输出流)或抽象类Writer(字节输出流)的子类
1.输入流
InputStream方法:
方法 | 作用 |
---|---|
read() | 从输入流中读取数据的下一个字节。返回0~255范围内的int字节值。如果因为已经到达流末尾而没有可用的字节,则返回值为-1 |
read(byte[] b) | 从输入流中读入一定长度的字节,并以整数形式返回字节数 |
mark(int readlimit) | 在输入流的当前位置放置一个标记,readlimit参数告知此输入流在标记位置失效前允许读取的字节数 |
reset() | 将输入指针返回到当前所做的标记处 |
skip(long n) | 跳过输入流上的n个字节并返回实际跳过的字节数 |
markSupported() | 如果当前流支持mark()/reset()操作就返回true |
close() | 关闭此输入流并释放与该输流关联的所有系统资源 |
2.输出流OutputStream方法:
方法 | 说明 |
---|---|
write(int b) | 将指定字节写入此输出流 |
write(byte[] b) | 将b个字节从指定的byte数组写入此输出流 |
write(byte[] b,int off,int len) | 将指定byte数组中从偏移量off开始的len字节写入此输出流 |
flush() | 彻底完成输出并清空缓存区 |
close() | 关闭输出流 |
(三)File类
File类是java.io包中唯一代表磁盘文件本身的对象
1.文件的创建与删除
创建文件对象构造方法1:
new File(String pathname)
其中,pathname指路径名称(包含文件名称),如:
File file=new File("D:/1.txt")
创建文件对象构造方法2:
new File(String parent,String child)
其中,parent:父路径字符串,如:D:/或D:/doc;child:子路径字符串。如:letter.txt
例:
运行结果:
3.获取文件信息
File类方法:
方法 | 说明 |
---|---|
getName() | 获取文件的名称 |
canRead() | 判断文件是否可读 |
canWrite() | |
exites() | |
length() | 获取文件的长度 |
getAbsolutePath() | 获取文件文件的绝对路径 |
getParent() | 获取文件的父路径 |
isFile() | |
isDirectory() | |
isHidden() | |
lastModified | 获取文件最后修改时间 |
例:
运行结果:
(四)文件输入/输出流
1.FileInputStream与FileOutputStream类
FileInputStream与FileOutputStream类都用来操作磁盘文件。
FileInputStream构造方法:
FileInputStream(String name);
FileInputStream(File file);
注: FileOutputStream有相同的构造方法,创建一个FileOutputStream对象时,可以指定不存在的文件名,但此文件不能是一个已被其它程序打开的文件。
例:
运行结果:
2.FileReader和FileWriter类
FileInputStream与FileOutputStream类只提供了对字节或字节数组的读取方法。由于汉字在文件中只占用两个字节,如果使用字节流,就有可能出现乱码现象,此时采用字符流FileReader和FileWriter类可以避免这种现象
(五)带缓存的输入/输出流
1.BufferedInputStream与BufferedOutputStream类
BufferedInputStream类的构造方法:1)BufferedInputStream(InputStream in);2)BufferedInputStream((InputStream in,int size)
说明:第一种构造方法创建了一个带有32个字节的缓存流;第二种构造方法按指定的大小来创建缓存区
BufferedOutputStream类的构造方法:1)BufferedOutputStream(OutputStream in);2)BufferedOutputStream((OutputStream in,int size)
说明:第一种构造方法创建了一个带有32个字节的缓存流;第二种构造方法按指定的大小来创建缓存区
2.BufferedReader与BufferedWriter类
BufferedReader类常用方法:
方法 | 说明 |
---|---|
read() | 读取单个字符 |
readLine() | 读取一个文本行,并将其返回为字符串。若无数据可读,则返回null |
BufferedWriter类常用方法:
方法 | 说明 |
---|---|
write(String s,int off,int len) | 写入字符串的某一部分 |
flush() | 刷新该流的缓存 |
newLine() | 写入一个分隔符 |
例:
package IO流;
import java.io.*;
public class Student {
public static void main(String[] args) {
//定义字符串数组
String content[]= {"好久不见","最近好吗","常联系"};
File file=new File("D:/word.txt");
try {
FileWriter fw=new FileWriter(file); //创建FileWriter类对象
//创建BufferedWriter类对象
BufferedWriter bufw=new BufferedWriter(fw);
for(int k=0;k<content.length;k++) { //循环遍历数组
bufw.write(content[k]); //将字符串数组中的元素写入到文件磁盘
bufw.newLine(); //将数组中的单个元素以单行的形式写入文件
}
bufw.close();
fw.close();
}catch(Exception e) {
e.printStackTrace();
}
try {
FileReader fr=new FileReader(file); //创建FileReader类对象
BufferedReader bufr=new BufferedReader(fr); //创建BufferedReader类对象
String s=null; //创建字符串对象
int i=0; //声明int型变量
//如果文件的文本行数不为null,则进入循环
while((s=bufr.readLine())!=null) {
i++;
System.out.println("第"+i+"行:"+s);
}
bufr.close();
fr.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
(七)ZIP压缩输入/输出流
java.util.zip包中的ZipOutputStream与ZipInputStream类来实现文件的压缩/解压缩。
1)如要从ZIP压缩文件内读取某个文件,要先找到对应文件的“目录进入点”(从它可知该文件在ZIP文件内的位置),才能读取这个文件的内容。
2)如要将文件内容写入ZIP文件内,必须先写入对应于该文件的“目录进入点”,并且要把写入文件内容的位置移到进入点所指的位置,然后再写入文件内容。
3)ZipEntry类产生的对象,时用来代表一个ZIP压缩文件内的进入点(entry)。
1.压缩文件
利用ZipOutputStream类对象,可将文件压缩为.zip文件。其构造方法如下:
ZipOutputStream(OutputStream out)
ZipOutputStream常用方法:
方法 | 说明 |
---|---|
putNextEntry(ZipEntry e) | 开始写一个新的ZipEntry,并将流内的位置移到此entry所指数据的开头 |
write(byte[] b,int off,int len) | 将字节数组写入当前ZIP条目数据 |
finish() | 完成写入ZIP输出流的内容,无须关闭它所配合的OutputStream |
setComment(String comment) | 可设置此ZIP文件的注释文字 |
例:
运行结果: