黑马程序员—IO流2

----------------------   JavaEE+Android、Java培训、期待与您交流! ----------------------


打印流

打印流包括:PrintStream和PrintWriter。该流提供了打印方法,可将各种类型的数据都原样打印

字节打印流:PrintStream

构造方法中可接收的参数类型:

1、file对象。File

2、字符串路径:String

3、字符输出流:OutputStream

字符串打印流:PrintWriter

构造方法中可接受的参数类型

1、file对象:File

2、字符串路径:String

3、字节输出流:OutputStream

4、字符输出流:Writer

import java.io.*;

class PrintDemo
{
	public static void main(String[] args) throws IOException
	{
		//键盘录入,创建读取流对象
		BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
		//使用打印流,将文件输出
		//输出到屏幕
		PrintWriter out = new PrintWriter(new FileWriter("a.txt"),true);
		String line = null;
		while((line=bufr.readLine())!=null)
		{
			if("over".equals(line))
				break;
			out.println(line.toUpperCase());
			//out.flush();
		}
		bufr.close();
		out.close();
	}
}

合并流

SequenceInputStream可以将多个流连接成一个源。

构造函数:SequenceInputStream(Enumeration<? extends FileInputStream> e)

如何合并多个文件:

1、创建集合,并将流对象添加进集合

2、创建Enumeration对象,将集合元素加入。

3、创建SequenceInputStream对象,合并流对象

4、创建写入流对象,FileOutputStream,将数据写入流资源

5、定义数组,将读取流数据存入数组,并将数组中元素写入文件中。

例如:假设有三个文件,将三者合并到一个新文件中
	//合并流对象
	public static void sequenceFile()throws IOException
	{
		FileOutputStream fos = null;
		SequenceInputStream sis = null;
		try
		{
			//创建集合,存储多个文件
			ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();
			for(int i=1;i<=3;i++)
			{
				al.add(new FileInputStream(i+".part"));
			}
			//匿名内部类访问局部变量要final
			final Iterator<FileInputStream> it = al.iterator();
			//创建Enumeration匿名对象
			Enumeration<FileInputStream> en = new Enumeration<FileInputStream>()
			{
				public boolean hasMoreElements()
				{
					return it.hasNext();
				}
				public FileInputStream nextElement()
				{
					return it.next();
				}
			};
			//合并流对象,将集合元素加入。
			sis = new SequenceInputStream(en);
			//创建写入流对象,FileOutputStream
			fos = new FileOutputStream("7.bmp");
			byte[] b = new byte[1024*1024];
			int len = 0;
			//循环,将数据写入流资源
			while((len=sis.read(b))!=-1)
			{
				fos.write(b);
			}

		}
		catch (IOException e)
		{
			throw new RuntimeException("文件操作失败");
		}
		//关闭流资源
		finally
		{
			try
			{
				if(fos!=null)
					fos.close();
			}
			catch (IOException e)
			{
				throw new RuntimeException("关闭流资源操作失败");
			}
			try
			{
				if(sis!=null)
					sis.close();
			}
			catch (IOException e)
			{
				throw new RuntimeException("关闭流资源操作失败");
			}
		}		
	}

切割流资源

1、先关联文件FileInputStream

2、定义写入流变量:FileOutputStream

3、创建数组,并定义切割所需的大小|

4、循环读写数据,并每次创建一个新写入流,创建完后并写入文件中

5、关闭流资源

	//切割流对象
	public static void splitFile()throws IOException
	{
		//创建全局变量
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try
		{
			//创建文件读取流
			fis = new FileInputStream("0.bmp");
			//创建数组
			byte[] b = new byte[1024*1024];
			int len = 0;
			//计数器
			int count = 1;
			//循环写入数据
			while((len=fis.read(b))!=-1)
			{
				//每次创建一个新写入流,写入后关闭流资源
				fos = new FileOutputStream((count++)+".part");
				fos.write(b,0,len);
				fos.close();
			}
		}
		catch (IOException e)
		{
				throw new RuntimeException("关闭流资源操作失败");
		}
		//关闭流资源
		finally
		{
			try
			{
				if(fis!=null)
					fis.close();
			}
			catch (IOException e)
			{
				throw new RuntimeException("关闭流资源操作失败");
			}
		}
		
	}
}



----------------------   JavaEE+Android、Java培训、期待与您交流! ----------------------

详细请查看: http://edu.csdn.net

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值