SequenceInputStream类(对包含多个对象内的文件连续进行读取)
来源:互联网 发布:快速排序算法 图解 编辑:程序博客网 时间:2024/05/23 00:24
SequenceInputStream类的相关使用
SequenceInputStream类允许连接多个InputStream对象。SequenceInputStream对象的构造函数与其他所有InputStream对象都不同。SequenceInputStream构造函数使用一对
InputStream对象或InputStream对象的一个Enumeration对象作为参数:
SequenceInputStream(InputStream first,InputStream second)
SequenceInputStream(Enumeration<? extends InputStream> streamEnum)
在操作上,该类从第一个InputStream对象进行读取,直到读取完全部内容,然后切换到第二个InputStream对象。对于使用Enumeration对象的情况,该类持续读取所有InputStream对象中的内容,直到到达最后一个InputStream对象的末尾为止。当到达每个文件的末尾时,与之关联的流就会被关闭。关闭通过SequenceInputStream创建的流,会导致关闭所有未关闭的流。
下面是一个简单的例子,该例使用SequenceInputStream对象输出两个文件中的内容,使用传统的关闭方式(也可使用带资源的try语句进行关闭)。
import java.io.*;import java.util.*;class InputStreamEnumerator implements Enumeration<FileInputStream>{private Enumeration<String> files;public InputStreamEnumerator(Vector<String> files){this.files=files.elements();//Vector类与ArrayList类似 但Vector是同步的 并遗留了方法Enumeration<String> elements()//用于返回向量元素中的一个枚举}public boolean hasMoreElements(){return files.hasMoreElements();}public FileInputStream nextElement(){try{return new FileInputStream(files.nextElement().toString());}catch(IOException e){return null;}}}class SequenceInputStreamDemo {public static void main(String[] args){int c;Vector<String> files=new Vector<String>();files.addElement("c:file1.txt");files.addElement("c:file2.txt");files.addElement("c:file3.txt");InputStreamEnumerator ise=new InputStreamEnumerator(files);InputStream input=new SequenceInputStream(ise); //SequenceInputStream类为InputStream子类//所以可以转化为InputStream的引用InputStreamReader reader=new InputStreamReader(input);//将字节流转化为字符流try{while((c=reader.read())!=-1)System.out.print((char)c);}catch(NullPointerException e){System.out.println("Error opening File.");}catch(IOException e){System.out.println("I/O Error: "+e);}finally{try{reader.close();}catch(IOException e){System.out.println("Error Closing SequenceInputStream");}}}}
这个例子创建了一个Vector对象,然后为其添加了三个文件。将这个向量的名称传递给InputStreamEnumerator类,使用它们的名称打开FileInputStream对象,设计InputStreamEnumerator的目的是为向量提供一个封装器,该封装器传递进去Vector对象
参数,返回元素而不是文件名。SequenceInputStream对象依次打开每个文件,并且以上程序输出文件内容。
注意在nextElement()方法中,如果不能打开文件,就返回null。这会导致NullPointerException异常,可以在main()方法中捕获该异常。
- SequenceInputStream类(对包含多个对象内的文件连续进行读取)
- 使用java类SequenceInputStream 对一个文件进行分割和合并的操作
- matlab 连续读取多个文件
- Matlab连续读取多个文件
- 读取省市区文件,并对文件内的数据进行处理和存储
- Java 如何对文件进行多个Object对象流的读写操作
- Java 如何对文件进行多个Object对象流的读写操作
- Java 如何对文件进行多个Object对象流的读写操作
- Java —— 对文件进行多个Object对象流的读写操作
- java---序列六(合并流)SequenceInputStream ——对多个流进行合并
- java提高篇(13)--SequenceInputStream ——对多个流进行合并
- SequenceInputStream多文件复制器
- Java中SequenceInputStream合并流实现多个文件合并
- matlab连续读取一个文件夹中的多个文件
- matlab一个文件夹里面包含多个文件夹,读取所有文件夹内的图像路径生成list
- 读取文件包含重要字段进行判断
- C++, “包含类的头文件”还是“对类进行前置声明”?
- 对"对象的多个属性"进行匹配搜索"对象数组"的算法
- 一致性hash算法 - consistent hashing
- spring组件扫描<context:component-scan/>使用详解
- C语言快速排序算法代码分析
- 先进先出队列(链表实现)
- Java初始化的例子分析
- SequenceInputStream类(对包含多个对象内的文件连续进行读取)
- java网络爬虫-总结
- hibernate4.2关于sessionFactory的一点变化
- 16/32位MD5加密工具类
- copy_to_user和copy_from_user
- JS实现随机显示一个数组中的数值;
- 大数据Lambda架构
- Android开发大牛们的博客地址
- JAVA 控制台打印三角形