~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
开发工具与关键技术:MyEclipse
作者:朱海恩
撰写时间: 2019.04.20
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Java的IO流是实现输入(输出)的基础,它可以方便地实现数据的输入(输出)操作,在 Java中把不同的输入(输出)源(键盘、文件、网络连接等)抽象表述 为“流”(stream),通过流的方式允许Java程序使用相同的方式来访问不同的输入输出源。 stream是从起源(source)到接收(sink)的有序数据。 Java把所有传统的流类型(类或抽象类)都放在java.io包中,用以实现输入输出功 能。
Java的IO流共涉及40多个类,都非常规则,而且彼此之间存在非常紧密的联系。
文件切割:在切割文件时,我们并不知道它会切割出多少个碎片文件(根据文件的大小来切割的),会影响到文件合并。那么必须记录住被切割文件的名称,以及切割出来碎片文件的个数。以方便于合并。这个信息为了进行描述,使用键值对的方式,用到了Properties对象。
将碎片文件的个数和文件名字保存到Properties集合中。
//获取指定目录下的配置文件对象
File[] files=dir.listFiles(new SuffixFilter(".properties"));
//判断对象长度,当对象长度不等1时,立马手动抛异常
if (files.length!=1) {
throw new RuntimeException(dir+",该目录下没有properties扩展名的文件或者不唯一");
}
//记录配置文件对象
File confile=files[0];
文件合并:在合并文件的时候,我们并不知道在切割文件的时候,切割了多少个碎片文件,那么我们怎么进行合并文件。首先获取指定目录下的配置文件对象,进行判断,再获取配置文件的信息,加载流,获取到碎片文件的个数和文件名字,获取该目录下的所有碎片文件,判断碎片文件的长度是否等于count-1,再将碎片文件和流对象关联并存储到集合中,再将多个混合并成一个序列流。
还可以通过枚举和迭代器来实现文件合并:
//迭代器
final Iterator<FileInputStream> it=a1.iterator();
//枚举接口实现过程中利用了迭代器
Enumeration<FileInputStream> en=new Enumeration<FileInputStream>() {
//内部访问局部变量时要final
@Override
public boolean hasMoreElements() {
// TODO Auto-generated method stub
return it.hasNext();
}
@Override
public FileInputStream nextElement() {
// TODO Auto-generated method stub
return it.next();
}
};
还有简单一点的写法,直接调用它的封装方法:
Enumeration<FileInputStream> en=Collections.enumeration(a1);