黑马程序员技术交流社区

标题: 小发现,哈哈,原来操作流有时候不用中间数组也行啊 [打印本页]

作者: 张飞年    时间: 2012-9-19 17:34
标题: 小发现,哈哈,原来操作流有时候不用中间数组也行啊
本帖最后由 张飞年 于 2012-9-19 22:35 编辑

今天在学网络编程时冒出一个想法,我们以前复制什么的操作IO流时都用数组了,现在我直接用流读进来再直接写出去行不行呢,经过好多的尝试发现只有简单的一句话输入输出的可以完成,像:
  1. public class TestLiu {
  2.         public static void main(String[] args) throws Exception{
  3.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  4.                 BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
  5.                 while(true){
  6.                         bufw.write(bufr.readLine());
  7.                         bufw.flush();
  8.         }
  9.         }
  10. }
复制代码
但是像复制文件时虽然也可以复制过去,但会出现问题:如果加了关闭流会莫名的出错,复制过去的文本会丢失内容,还有while的条件判断不好写。大家有什么办法吗?像下面:
  1. public class TestLiu {
  2.         public static void main(String[] args) throws Exception {
  3.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(
  4.                                 new FileInputStream("D:\\demo.txt")));
  5.                 BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(
  6.                                 new FileOutputStream("d:\\2223.java")));
  7.                 while (true) {
  8.                         bufw.write(bufr.readLine());
  9.                         bufw.flush();
  10.                         if(bufr.read() == -1){
  11.                                 break;//这样可以结束,但这里有个问题就是它会把回车给丢了,复制出来的文本是一片,怎么会事
  12.                         }
  13.                 }
  14.         }
  15. }
复制代码

作者: 赵永康    时间: 2012-9-19 18:09
嗯 评分的人说的很对  你在往出写的时候应该加上bufw.newLine();  因为readLine();只是读取一行,没有读到"\r";所以你需要加上缓冲技术的newLine();
作者: 张飞年    时间: 2012-9-19 19:17
赵永康 发表于 2012-9-19 18:09
嗯 评分的人说的很对  你在往出写的时候应该加上bufw.newLine();  因为readLine();只是读取一行,没有读到" ...

哈哈,正解,一时给蒙住了。
作者: 广驰    时间: 2012-9-19 20:22
readLine()就是一次读取一行,他凭什么一次调用一行呢,所以就要判断是不是又换行标记,有的话就返回前面读取的数据,这样换行标记就没有读进去,所以在输出的时候就没有换行符了,就会一次一片,bufw.write(bufr.readLine());
(所以可以自己手动在这里加上换行符newLine)
                        bufw.flush();
作者: 张飞年    时间: 2012-9-19 22:35
应广驰 发表于 2012-9-19 20:22
readLine()就是一次读取一行,他凭什么一次调用一行呢,所以就要判断是不是又换行标记,有的话就返回前面读 ...

明白勒。。。




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