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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张飞年 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
创出一片辉煌 + 1 readLined读取到'\n'前结束,所以没有换行.

查看全部评分

4 个回复

正序浏览
应广驰 发表于 2012-9-19 20:22
readLine()就是一次读取一行,他凭什么一次调用一行呢,所以就要判断是不是又换行标记,有的话就返回前面读 ...

明白勒。。。
回复 使用道具 举报
readLine()就是一次读取一行,他凭什么一次调用一行呢,所以就要判断是不是又换行标记,有的话就返回前面读取的数据,这样换行标记就没有读进去,所以在输出的时候就没有换行符了,就会一次一片,bufw.write(bufr.readLine());
(所以可以自己手动在这里加上换行符newLine)
                        bufw.flush();
回复 使用道具 举报
赵永康 发表于 2012-9-19 18:09
嗯 评分的人说的很对  你在往出写的时候应该加上bufw.newLine();  因为readLine();只是读取一行,没有读到" ...

哈哈,正解,一时给蒙住了。
回复 使用道具 举报
嗯 评分的人说的很对  你在往出写的时候应该加上bufw.newLine();  因为readLine();只是读取一行,没有读到"\r";所以你需要加上缓冲技术的newLine();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马