java笔记-IO流-字节打印流

本文介绍了Java中的PrintStream和PrintWriter,它们分别是字节打印流和字符打印流。PrintStream用于原样打印各种数据类型,支持File、String、FileOutputStream作为构造参数。而PrintWriter支持File、String、FileOutputStream和Writer。文中还展示了如何使用PrintWriter将键盘输入输出到指定文件,并详细解释了如何合并多个文件到一个新文件的过程,涉及SequenceInputStream和Enumeration的概念。
摘要由CSDN通过智能技术生成

PrintStream将各种数据类型的数据原样打印。

PrintStream

字节打印流

构造函数可以接收的参数类型

1.File对象 :File

2.字符串路径:String

3.字节输出流:FileOutputStream

PrintWriter

字符打印流

 构造函数可以接收的参数类型

1.File对象 :File

2.字符串路径:String

3.字节输出流:FileOutputStream

4.字符输出流:Writer

PrintWriter实例:将键盘输入输出到指定文件

/*
 PrintStream将各种数据类型的数据原样打印。
 PrintStream	
	字节打印流
	构造函数可以接收的参数类型
	1.File对象	:File
	2.字符串路径:String
	3.字节输出流:FileOutputStream
 PrintWriter
 字符打印流
 构造函数可以接收的参数类型
	1.File对象	:File
	2.字符串路径:String
	3.字节输出流:FileOutputStream
	4.字符输出流:Writer
*/
/*
 PrintWriter实例:打印键盘输入
*/
import java.io.*;
import java.util.*;
class  PrintWriterDemo
{
	public static void main(String[] args) throws IOException
	{
		BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in)); 
		//使用PrintWriter指定输出位置
		PrintWriter pw=new PrintWriter(new FileWriter("a.txt"),true);
		String str=null;
		while((str=bufr.readLine())!=null){
			pw.println(str);
		}
		//关闭输入
		bufr.close();
		//关闭输出
		pw.close();
	}
}
分割文件(SequenceInputStream)

思路:

1.SequenceInputStream可将多个文件合并输出,其接收的参数为Enumeration,Vector类可返回Enumeration

2.将要合并的文件存储到Vector(只接收FileInputStream),并使用elements方法枚举

3.将得到的Enumeration传递给SequenceInputStream,并读取。

4.将读取到的数据存储到指定的文本文件

/*
 SequenceInputStream实例:将多个文件的内容合并到一个文件
*/
/*
SequenceInputStream(Enumeration<? extends InputStream> e) 
          通过记住参数来初始化新创建的 SequenceInputStream,
		  该参数必须是生成运行时类型为 InputStream 对象的Enumeration 型参数。
Vector
 Enumeration<E> elements() 
          返回此向量的组件的枚举。 
*/
import java.io.*;
import java.util.*;
class  SequenceDemo
{
	public static void main(String[] args) throws IOException
	{
		//SequenceInputStream的参数中需要使用Enumeration
		//Enumeration在Vector中。
		Vector<FileInputStream> v=new Vector<FileInputStream>();
		v.add(new FileInputStream("h:\\javabase\\day20\\1.txt"));
		v.add(new FileInputStream("h:\\javabase\\day20\\2.txt"));
		v.add(new FileInputStream("h:\\javabase\\day20\\3.txt"));
		//列出Vector中的所有枚举
		Enumeration<FileInputStream> e=v.elements();
		SequenceInputStream sis=new SequenceInputStream(e);
		//指定存储的文本文件。
		FileOutputStream fos=new FileOutputStream("h:\\javabase\\day20\\4.txt");
		int len=0;
		byte[] buf=new byte[1024];
		String str=null;
		while((len=sis.read(buf))!=-1){
			fos.write(buf,0,len);
		}
		sis.close();
		fos.close();
	}
}

合并文件

思路:

1.将碎片文件存储到集合容器中

2.将存储碎片的集合容器转化为Enumeration

3.将转化好的Enumeration作为参数传递给SequenceInputStream

4.依次循环读取SequenceInputStream中的数据并写入合并的文件

5.关闭资源

/*
 合并文件
*/
import java.io.*;
import java.util.*;
class  mergeDemo
{
	public static void main(String[] args) throws IOException
	{
		System.out.println("Hello World!");
		merge();
	}
	public static void merge()throws IOException{
		//构建集合,存储分割好的文件
		ArrayList<FileInputStream> arr=new ArrayList<FileInputStream>();
		for(int x=1;x<4;x++){
			arr.add(new FileInputStream("H:\\javabase\\day20\\"+x+".part"));
		}
		//使用迭代器构建枚举。
		final Iterator<FileInputStream> ite=arr.iterator();
		Enumeration<FileInputStream> en=new Enumeration<FileInputStream>(){
			public boolean hasMoreElements(){
				return ite.hasNext();
			}
			public FileInputStream nextElement(){
				return ite.next();
			}
		};
		//将得到的枚举传入SequenceInputStream参数中
		SequenceInputStream sis=new SequenceInputStream(en);
		//输出指定的文件
		FileOutputStream fos=new FileOutputStream("h:\\javabase\\day20\\123.bmp");
		int len=0;
		byte[] buf=new byte[1024];
		while((len=sis.read(buf))!=-1){
			fos.write(buf,0,len);
		}
		fos.close();
		sis.close();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值