黑马程序员技术交流社区

标题: 求大家帮忙解决个小问题 [打印本页]

作者: bird_not_fat    时间: 2013-10-11 21:52
标题: 求大家帮忙解决个小问题
  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方法不是自动换行吗?

作者: Liu阳    时间: 2013-10-11 22:45
我没看你的代码,你的流中是否读取完的字节是多少?空白可能有'\0'吗?
作者: 横塘西岸    时间: 2013-10-11 23:10
SequeceInputStream只是把流一个接一个的传进来,并没有为文件末尾加换行符的功能,所以你调用line = br.readLine()时,一个文件读完后因为后面没有换行符所以它会接着读下一个文件,这可能就是原因,不关println的事
作者: bird_not_fat    时间: 2013-10-12 00:36
xh396660787 发表于 2013-10-11 23:05
我想你的三个part.txt中的文本都没有换行吧。
SequenceInputStream把三个流合成一个流,由于三个文本都没有 ...

嗯,这个确实是,怎么才能让它在即使在三个文本没换行的情况下也能让它换行的打印出来呢?
作者: To    时间: 2013-10-12 11:21
楼主你好,如果问题已解决请将帖子状态改为提问结束,如果未解决请继续提问,谢谢合作。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2