IO流-12

 

 

打印流:
该流提供了打印方法,可以将各种数据类型的数据都原样打印

PrintStream(字节打印流)
构造函数可以接收的参数类型:
1,file对象。File
2,字符串路径。String
3,字节输出流。OutputStream

PrintWrite(字符打印流)
构造函数可以接收的参数类型:
1,file对象。File
2,字符串路径。String
3,字节输出流。OutputStream
4,字符输出流,Writer

例:
import java.io.*;
class PrintStreamDemo
{
 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(); 
  }
  
  out.close();//关闭流
  bufr.close();
 }
}

-----------------------------------------------------------------------------


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

合并流,代码:
import java.io.*;
import java.util.*;
class SequenceDemo
{
 public static void main(String[] args)throws IOException
 {
  Vector<FileInputStream> v = new Vector<FileInputStream>();//创建集合对象,并作泛型限定
  
  v.add(new FileInputStream("c:\\1.txt"));//添加元素
  v.add(new FileInputStream("c:\\3.txt"));
  v.add(new FileInputStream("c:\\2.txt"));
  
  Enumeration<FileInputStream> en = v.elements();
  
  SequenceInputStream sis = new SequenceInputStream(en);
  
  FileOutputStream fos = new FileOutputStream("c:\\4.txt");//输出地
  
  byte[] buf = new byte[1024];
  
  int len = 0;
  while((len=sis.read(buf)) != -1)
  {
   fos.write(buf, 0, len); 
  }
  fos.close();
  sis.close();
 }
}

 -------------------------------------------------------------------------------------------------------------------------

/*
切割流对象并合并
*/
import java.io.*;
import java.util.*;
class SplitFile
{
 public static void main(String[] args)throws IOException
 {
  //splitFile();
  merge();
 }
 
 public static void merge()throws IOException //合并流对象
 {
  ArrayList<FileInputStream> a1 = new ArrayList<FileInputStream>();//集合对象,泛型限定
  
  for(int x=1; x<=3; x++)
  {
   a1.add(new FileInputStream("c:\\splitfile\\"+x+".part")); //添加元素
  }
  
  final Iterator<FileInputStream> it = a1.iterator();//迭代器
  
  Enumeration<FileInputStream> en = new Enumeration<FileInputStream>()
  {
   //枚举
   public boolean hasMoreElements()
   {
    return it.hasNext();
   }
   public FileInputStream nextElement()
   {
    return it.next(); 
   }
  };
  
  SequenceInputStream sis = new SequenceInputStream(en);
  
  FileOutputStream fos = new FileOutputStream("c:\\splitfile\\0.JPG");
  
  byte[] buf = new byte[1024];
  
  int len = 0;
  
  while((len=sis.read(buf)) != -1)
  {
   fos.write(buf, 0, len); //写入
  }
  
  fos.close();
  sis.close();
}
 
 public static void splitFile()throws IOException //切割流对象
 {
  FileInputStream fis = new FileInputStream("c:\\138.JPG");//关联文件
  
  FileOutputStream fos = null;
  byte[] buf = new byte[1024*1014];//每次刚好1M
  
  int len = 0;
  int count = 1;
  
  while((len=fis.read(buf)) != -1)
  {
   fos = new FileOutputStream("c:\\splitfile\\"+(count++)+".JPG"); //创建对象
   fos.write(buf, 0, len);//写入
   fos.close();//读一次关闭一次流
  }
  fis.close();
 }
}

-----------------------------------------------------------------------------------------------------

个人总结:注意PrintStream和PrintWrite的区别,分别是字节打印流和字符打印流,可以

改变默认输出方式,序列流SequenceInputStream可以用于多个文件的合并,需要和集合

结合使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值