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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© bird_not_fat 中级黑马   /  2013-10-11 21:52  /  1187 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.io.BufferedReader;
  2. import java.io.FileInputStream;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.InputStreamReader;
  8. import java.io.PrintStream;
  9. import java.io.SequenceInputStream;
  10. import java.util.Enumeration;
  11. import java.util.Vector;

  12. /**
  13. * 示例:用合并流将part1.txt,part2.txt,part3.txt三个文件
  14. *     打印到total.txt文件中
  15. * @author lt
  16. */
  17. public class SequeceInputStreamDemo {
  18.         //获取Vector对象,传入的参数个数是可变长度的,Vector中可以添加任意多个元素
  19.         public static Vector<InputStream> getVector(String... values) throws FileNotFoundException{
  20.                 Vector<InputStream> v = new Vector<InputStream>();
  21.                 for(int i = 0;i < values.length;i++){
  22.                         try {
  23.                                 v.add(new FileInputStream(values[i]));
  24.                         } catch (FileNotFoundException e) {
  25.                                 throw e;
  26.                         }
  27.                 }
  28.                 return v;
  29.         }
  30.         //打印三个文件中的内容到一个文件中去
  31.         public static void printToTotal(Vector<InputStream> v) throws IOException{
  32.                 Enumeration<InputStream> e = v.elements();
  33.                 //输入流是一个合并流
  34.                 BufferedReader br = new BufferedReader(new InputStreamReader(new SequenceInputStream(e)));
  35.                 PrintStream ps = new PrintStream(new FileOutputStream("total.txt"),true);
  36.                 String line = null;
  37.                 try {
  38.                         while((line = br.readLine()) != null){
  39.                                 ps.println(line);
  40.                         }
  41.                 } catch (IOException e1) {
  42.                         throw e1;
  43.                 }
  44.         }
  45.         public static void main(String[] args) {
  46.                 String path1 = "part1.txt";
  47.                 String path2 = "part2.txt";
  48.                 String path3 = "part3.txt";
  49.                 Vector<InputStream> v = null;
  50.                 try {
  51.                         v = getVector(path1,path2,path3);
  52.                         printToTotal(v);
  53.                 } catch (FileNotFoundException e) {
  54.                         System.out.println("文件路径有误!");
  55.                 } catch (IOException e) {
  56.                         System.out.println("目标文件无法创建!");
  57.                 }
  58.         }
  59. }
复制代码
第一个文件中是"aaa",第二个文件中"bbb","第三个文件中"ccc",我想把他们合并在一个文件,但是我用PrintOutputStream打印流打印出来的结果是"aaabbbccc",连在一起的没换行。这是为什么呢?打印流的println方法不是自动换行吗?

评分

参与人数 1技术分 +1 收起 理由
李江 + 1

查看全部评分

4 个回复

倒序浏览
我没看你的代码,你的流中是否读取完的字节是多少?空白可能有'\0'吗?
回复 使用道具 举报
SequeceInputStream只是把流一个接一个的传进来,并没有为文件末尾加换行符的功能,所以你调用line = br.readLine()时,一个文件读完后因为后面没有换行符所以它会接着读下一个文件,这可能就是原因,不关println的事
回复 使用道具 举报
xh396660787 发表于 2013-10-11 23:05
我想你的三个part.txt中的文本都没有换行吧。
SequenceInputStream把三个流合成一个流,由于三个文本都没有 ...

嗯,这个确实是,怎么才能让它在即使在三个文本没换行的情况下也能让它换行的打印出来呢?
回复 使用道具 举报
To 金牌黑马 2013-10-12 11:21:51
报纸
楼主你好,如果问题已解决请将帖子状态改为提问结束,如果未解决请继续提问,谢谢合作。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马