`

24、IO包中的打印流,合并流

阅读更多

一、PrintWriter字符打印流

 

    与PrintStream非常类似

 

package day13;

import java.io.*;

public class PrintWriterDemo {

	public static void main(String[] args) throws IOException {
		BufferedReader br = 
				new BufferedReader(new InputStreamReader(System.in));
		PrintWriter pw = new PrintWriter(new FileWriter("E:/in.txt"));
		String line = null;
		while((line=br.readLine())!=null)
		{
			if(line.equals("over"))
				break;
			pw.println(line.toUpperCase());
		}
		pw.close();
		br.close();
	}
}

 

二、SequenceInputStream合并流

 

  1. SequenceInputStream 表示其他输入流的逻辑串联。
  2. 它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,
  3. 接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。 

 

public class SequenceInputStream extends InputStream
{
	//通过记住这两个参数来初始化新创建的 SequenceInputStream(将按顺序读取这两个参数,先读取 s1,然后读取 s2),
	//以提供从此 SequenceInputStream 读取的字节
	public SequenceInputStream(InputStream s1,
                           InputStream s2){}

	//通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream 对象的 Enumeration 型参数。
	//将按顺序读取由该枚举生成的输入流,以提供从此 SequenceInputStream 读取的字节。
	//在用尽枚举中的每个输入流之后,将通过调用该流的 close 方法将其关闭。
	public SequenceInputStream(Enumeration<? extends InputStream> e){}
}

 

三、示例

 

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector;

/**
 * 需求:合并多个文件为一个文件
 */
public class SequnceInputStreamDemo {

	public static void main(String[] args) throws IOException {
		//用Vector存储多个InputStream对象
		Vector<FileInputStream> v = new Vector<FileInputStream>();
		v.add(new FileInputStream("e:/1.mp3"));
		v.add(new FileInputStream("e:/2.mp3"));
		v.add(new FileInputStream("e:/3.mp3"));
		
		//得到Enumeration
		Enumeration<FileInputStream> e = v.elements();
		
		SequenceInputStream sis = new SequenceInputStream(e);
		FileOutputStream fos = new FileOutputStream("e:/4.mp3");
		
		byte[] buf = new byte[1024];
		int num = 0;
		while((num=sis.read(buf))!=-1)
		{
			fos.write(buf,0,num);
		}
		fos.close();
		sis.close();
		System.out.println("合并成功");
	}
}

 

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;

/**
 * 需求:合并多个文件为一个文件
 * 
 * 分析:用ArrayList代替Vector更高效,但是要得到Enumeration就必须转换
 */
public class SequnceInputStreamDemo {

	public static void main(String[] args) throws IOException {
		//用Vector存储多个InputStream对象
		ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();
		al.add(new FileInputStream("e:/1.mp3"));
		al.add(new FileInputStream("e:/2.mp3"));
		al.add(new FileInputStream("e:/3.mp3"));
		
		//得到Enumeration
		final Iterator<FileInputStream> it = al.iterator();
		Enumeration<FileInputStream> e = new Enumeration<FileInputStream>(){
			public boolean hasMoreElements()
			{
				return it.hasNext();
			}
			public FileInputStream nextElement()
			{
				return it.next();
			}
		};
		SequenceInputStream sis = new SequenceInputStream(e);
		FileOutputStream fos = new FileOutputStream("e:/4.mp3");
		
		byte[] buf = new byte[1024];
		int num = 0;
		while((num=sis.read(buf))!=-1)
		{
			fos.write(buf,0,num);
		}
		fos.close();
		sis.close();
		System.out.println("合并成功");
	}
}

 

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 需求:切割文件
 */
public class SequnceInputStreamDemo {

	public static void main(String[] args) throws IOException {
		FileInputStream fis = new FileInputStream("e:/4.mp3");
		FileOutputStream fos;
		
		byte[] buf = new byte[1024*1024*5];
		int num = 0;
		int x = 5;
		while((num=fis.read(buf))!=-1)
		{
			fos = new FileOutputStream("e:/"+(x++)+".mp3");
			fos.write(buf,0,num);
			fos.close();
		}
		fis.close();
		System.out.println("切割成功");
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics