至此IO体系中的大半壁江山,已经学习完毕,接下来,主要学习的是:
IO 体系中的功能流对象!
1. 打印流
PrintWriter, PrintStream
可以直接操作输入流 和 文件。
PrintStream:
1.为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。
2.提供了一系列的打印功能,可以打印任何数据。
3.它的特有方法不抛出 异常。
PrintStream的目的可以是:
1. File对象 。 可以指定字符集。
2. 字符串路径。 可以指定字符集。
3. 字节输出流。 可以指定是否自动刷新。
在此,需要重点注意的是两个方法:
write() 将接受到的整数的最后一个字节写入到流。会解析。它写的是最低8位。
print()可以将参数的数据表示形式打印到目的中。保证表示形式。
原理:是将“97”转成字符串,再write 到目的中去。
PrintWriter字符打印流:
构造函数:
1. File对象。
2. 字符串路径
3. 字节输出流
4. 字符输出流
一般不用PrintWriter定义指定的编码表,为啥呢?
因为要操作编码表有专用的对象。转换流。
而且转换流不仅可以设置写的编码表,还可以设置读的编码表。
2. 序列流:SequenceInputStream
它的功能:实现对多个流进行合并。
将多个流进行逻辑串联(进行合并,变成一个流,操作起来很方便,因为多个源变成了一个源)
演示:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Iterator;
public class SequenceInputStreamDemo {
public static void main(String[] args) throws IOException {
FileInputStream fis1 = new FileInputStream("tempfile\\seq_1.txt");
FileInputStream fis2 = new FileInputStream("tempfile\\seq_2.txt");
FileInputStream fis3 = new FileInputStream("tempfile\\seq_3.txt");
//使用Vector时的情况:
//需求枚举对象。而具备枚举对象是Vector集合。
// Vector<FileInputStream> v = new Vector<FileInputStream>();
ArrayList<FileInputStream> v = new ArrayList<FileInputStream>();
v.add(fis1);
v.add(fis2);
v.add(fis3);
/*
final Iterator<FileInputStream> it = v.iterator();
Enumeration<FileInputStream> en = new Enumeration<FileInputStream>(){
@Override
public boolean hasMoreElements() {
return it.hasNext();
}
@Override
public FileInputStream nextElement() {
return it.next();
}
};
*/
//不使用Vector时的情况,用Collections工具类。
Enumeration<FileInputStream> en = Collections.enumeration(v);
SequenceInputStream sis = new SequenceInputStream(en);
//创建目的。
FileOutputStream fos = new FileOutputStream("tempfile\\seq_4.txt");
byte[] buf = new byte[1024];
int len = 0;
while((len=sis.read(buf))!=-1){
fos.write(buf,0,len);
}
fos.close();
sis.close();
}
}