A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马陈旭东 中级黑马   /  2012-6-10 10:55  /  1414 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//建立一个集合,Vector
  Vector<FileInputStream> vt = new Vector<FileInputStream>();
  
  vt.add(new FileInputStream("D:\\ryan.txt"));
  vt.add(new FileInputStream("D:\\ryan1.txt"));
  vt.add(new FileInputStream("D:\\ryan2.txt"));
  
  Enumeration<FileInputStream> en = vt.elements();
  
  //建立一个新的流对象,SequenceInputStream
  SequenceInputStream sis = new SequenceInputStream(en);
  
  FileOutputStream file = new FileOutputStream("D:\\ryan4.txt");
  
  byte[] by = new byte[1024];
  
  int len = 0;
  
  while((len=sis.read(by))!=-1)
  {
   file.write(by,0,len);//这里如果我不加上起始和长度的话,写入的数据会有一半变成乱码?求解 file.write(by)
  }
  
  sis.close();
  file.close();

评分

参与人数 1技术分 +1 收起 理由
赵志勇 + 1

查看全部评分

2 个回复

倒序浏览
public void write(byte[] b)将 b.length 个字节从指定 byte 数组写入此文件输出流中。但有时不是整个字节数组里都是有效字节,所以另有一个重载方法,可以指定字节数组的起始下标和长度。
回复 使用道具 举报
file.write(by)方法:将by.length 个字节从指定 byte 数组by写入此文件输出流file中.
file.write(by,0,len)方法:将指定 byte 数组by中从偏移量 0开始的 len 个字节写入此文件输出流。应用此方法的好处是
我们可以控制写入流中的字节数,因为几乎所有的文件都不可能刚好是1024字节长,当最后一次我们只从输入流中读
取了len字节长的数据时,我们只需要写入len字节长的数据即可将数据全部写完。

你这样用这两个方法的唯一区别是file.write(by)这个每次固定往输出流中写入1024个字节;file.write(by,0,len)每次写入
len长度字节,如附件所示,并不会 出现乱码,至于你说出现乱码能说具体点吗?
  1. package hcy.test.main;

  2. import java.io.FileInputStream;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.io.SequenceInputStream;
  6. import java.util.Enumeration;
  7. import java.util.Vector;

  8. public class Test {

  9.         /**
  10.          * @param args
  11.          * @throws IOException
  12.          */
  13.         public static void main(String[] args) throws IOException { //由于仅作测试,为方便直接抛出IOException
  14.                 // TODO Auto-generated method stub
  15.                 //建立一个集合,Vector
  16.                   Vector<FileInputStream> vt = new Vector<FileInputStream>();
  17.                   
  18.                   vt.add(new FileInputStream("D:\\ryan.txt"));
  19.                   vt.add(new FileInputStream("D:\\ryan1.txt"));
  20.                   vt.add(new FileInputStream("D:\\ryan2.txt"));
  21.                   
  22.                   Enumeration<FileInputStream> en = vt.elements();
  23.                   
  24.                   //建立一个新的流对象,SequenceInputStream
  25.                   SequenceInputStream sis = new SequenceInputStream(en);
  26.                   
  27.                   FileOutputStream file = new FileOutputStream("D:\\ryan4.txt");
  28.                   
  29.                   byte[] by = new byte[1024];
  30.                   
  31.                   int len = 0;
  32.                   
  33.                   while((len=sis.read(by))!=-1)
  34.                   {
  35.                    file.write(by);//我直接用这个测试                  }
  36.                   
  37.                   sis.close();
  38.                   file.close();
  39.         }

  40. }
复制代码
三个测试文件:ryan.txt   ryan1.txt   ryan2.txt   中的内容分别为abc0  abc1  abc2
http://bbs.itheima.com/forum.php?mod=attachment&aid=MzMxM3xlZTE3OTVhNzZlM2ZlM2RmOTMwMDBmZjgwNTRhMTQ2NHwxNzMxNTg0NTUx&request=yes&_f=.png
http://bbs.itheima.com/forum.php?mod=attachment&aid=MzMxMnw3NzBjN2JhNTdmOWFjZTczZGRiYTg1ZmI5M2U1ZDZkMnwxNzMxNTg0NTUx&request=yes&_f=.png

QQ截图20120610210629-02.png (4.4 KB, 下载次数: 79)

QQ截图20120610210629-02.png

QQ截图20120610210539-01.png (1.57 KB, 下载次数: 62)

QQ截图20120610210539-01.png

评分

参与人数 1技术分 +1 收起 理由
赵志勇 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马