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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 袁梦希 金牌黑马   /  2012-5-24 12:12  /  1610 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

问题部分:
//请大家不要晕
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

//这是一个包装类
class MyBufferedReader {

private FileReader r;
MyBufferedReader(FileReader r) {
  this.r = r;
}
public String MyEeadLine() throws Exception {
  StringBuilder sb = new StringBuilder();
  int ch;
  while ((ch = r.read()) != -1) {
   if (ch == '\r')
    continue;
   if (ch == '\n')
    return sb.toString();
   else
    sb.append((char) ch);
  }

  if (sb.length() != 0)
   return sb.toString();
  return null;

}
// 关闭输入流
public void MyClose() throws IOException {

  r.close();
}
}
// 测试类
public class Test1 {

public static void main(String[] args) throws Exception {
  MyBufferedReader mbr = new MyBufferedReader(
    new FileReader("Reader.txt"));
  BufferedWriter bfr = new BufferedWriter(new FileWriter("Writer.txt"));

  String line;
  while ((line = mbr.MyEeadLine()) != null) {

   bfr.write(line);
   
bfr.newLine();
  }
  mbr.MyClose();
  bfr.close();
}
}

问题部分:
  当我用eclipse运行的时候,为什么写入文件中多了一行。如下图:

读取的文件:


写入的文件:


备注:怎样把写入的文件多余的空行给去掉,用代码体现出来。

5 个回复

倒序浏览
  1. class MyBufferedReader {
  2. private FileReader r;
  3. MyBufferedReader(FileReader r) {
  4.   this.r = r;
  5. }
  6. public String MyEeadLine() throws Exception {
  7.   StringBuilder sb = new StringBuilder();
  8.   int ch;
  9.   while ((ch = r.read()) != -1) {
  10.    if (ch == '\r')
  11.     continue;
  12.    if (ch == '\n')
  13.     return sb.toString();
  14.    else
  15.     sb.append((char) ch);
  16.   }
  17.   if (sb.length() != 0)
  18.    return sb.toString();
  19.   return null;
  20. }
  21. // 关闭输入流
  22. public void MyClose() throws IOException {
  23.   r.close();
  24. }
  25. }
  26. // 测试类
  27. public class Test1 {
  28. public static void main(String[] args) throws Exception {
  29.   MyBufferedReader mbr = new MyBufferedReader(
  30.     new FileReader("Reader.txt"));
  31.   BufferedWriter bfr = new BufferedWriter(new FileWriter("Writer.txt"));
  32.   String line;
  33.   while ((line = mbr.MyEeadLine()) != null) {
  34.    bfr.write(line);
  35.    bfr.newLine();//因为你在这里写了一个换行,
  36. //每次读完以后写一个换行,
  37. //当写完最后一行以后,本来就不需要写一个换行了,但是这里写了,


  38.   }
  39.   mbr.MyClose();
  40.   bfr.close();
  41. }
  42. }
复制代码
回复 使用道具 举报
本帖最后由 yuan 于 2012-5-24 12:39 编辑
杨尧 发表于 2012-5-24 12:23


如果您能用代码写出来,那么我的问题解决了。
我的意思是:把第四行那个空白行去掉,用代码表现出来。
回复 使用道具 举报
  1. class MyBufferedReader {
  2. private FileReader r;
  3. MyBufferedReader(FileReader r) {
  4.   this.r = r;
  5. }
  6. public String MyEeadLine() throws Exception {
  7.   StringBuilder sb = new StringBuilder();
  8.   int ch;
  9.   while ((ch = r.read()) != -1) {
  10.    if (ch == '\r')
  11.     continue;
  12.    if (ch == '\n')
  13.     return sb.toString();
  14.    else
  15.     sb.append((char) ch);
  16.   }
  17.   if (sb.length() != 0)
  18.    return sb.toString();
  19.   return null;
  20. }
  21. // 关闭输入流
  22. public void MyClose() throws IOException {
  23.   r.close();
  24. }
  25. }
  26. // 测试类
  27. public class Test1 {
  28. public static void main(String[] args) throws Exception {
  29.   MyBufferedReader mbr = new MyBufferedReader(
  30.     new FileReader("Reader.txt"));
  31.   BufferedWriter bfr = new BufferedWriter(new FileWriter("Writer.txt"));
  32.   String line;
  33. //这样你的问题就解决了,意思就是刚开始先读一行,不加换行,
  34. //然后在while里面每次开始的时候加一个换行
  35. line = mbr.MyEeadLine();
  36. bfr.write(line);
  37.   while ((line = mbr.MyEeadLine()) != null) {
  38. bfr.newLine();
  39.    bfr.write(line);
  40.   }
  41.   mbr.MyClose();
  42.   bfr.close();
  43. }
  44. }
复制代码
回复 使用道具 举报
杨尧 发表于 2012-5-24 13:08

哦了,问题解决了,很技术的哥们。谢了,我整理为笔记。
回复 使用道具 举报
本帖最后由 杨尧 于 2012-5-24 14:04 编辑
yuan 发表于 2012-5-24 13:22
哦了,问题解决了,很技术的哥们。谢了,我整理为笔记。

:L一般了,加油!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马