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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

由于字数限制,只能分上下了

6、利用缓冲区完成文本文件拷贝功能
  1. package com.itheima.io;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.FileReader;
  5. import java.io.FileWriter;
  6. import java.io.IOException;

  7. public class CopyTextByBuf_2_3 {

  8.         /**
  9.          * 利用缓冲区复制文本文件
  10.          */
  11.         public static void main(String[] args) {
  12.                 BufferedReader br = null;
  13.                 BufferedWriter bw = null;
  14.                 FileReader fr = null;
  15.                 FileWriter fw = null;

  16.                 try {
  17.                         fr = new FileReader(".\\testData\\buf.txt");
  18.                         br = new BufferedReader(fr);

  19.                         fw = new FileWriter(".\\testData\\buf_copy.txt");
  20.                         bw = new BufferedWriter(fw);

  21.                         String line = "";
  22.                         while ((line = br.readLine()) != null) {
  23.                                 bw.write(line);
  24.                                 //readline()不读取换行符
  25.                                 bw.newLine();
  26.                                 //bw.flush();
  27.                         }
  28.                 } catch (IOException e) {
  29.                         throw new RuntimeException("读写失败!");
  30.                 } finally {
  31.                         try {
  32.                                 if (bw != null)
  33.                                         bw.close();
  34.                                 if (br != null)
  35.                                         br.close();
  36.                         } catch (IOException e) {
  37.                                 throw new RuntimeException("关闭失败!");
  38.                         }
  39.                 }
  40.         }

  41. }
复制代码



7、了解原理,编写自己的缓冲区方法
  1. package com.itheima.io;

  2. import java.io.FileReader;
  3. import java.io.IOException;

  4. /**
  5. * 装饰者设计模式:当想要对已有的对象进行功能增强时,可以定义 类,将已有对象传入,基于已有功能,并提供加强功能
  6. *
  7. * @author StephenHu
  8. *
  9. */
  10. public class MyBufferedReader_2_4 {

  11.         public static void main(String[] args) {
  12.                 FileReader fr = null;
  13.                 MyBufferedReader mbr = null;
  14.                 try {
  15.                         fr = new FileReader(".\\testData\\buf.txt");
  16.                         mbr = new MyBufferedReader(fr);
  17.                         String line = "";
  18.                         while ((line = mbr.myReadLine()) != null) {
  19.                                 System.out.println(line);
  20.                         }
  21.                 } catch (IOException e) {
  22.                         throw new RuntimeException("读写失败!");
  23.                 } finally {
  24.                         try {
  25.                                 if (mbr != null)
  26.                                         mbr.close();
  27.                         } catch (IOException e) {
  28.                                 e.printStackTrace();
  29.                         }
  30.                 }
  31.         }
  32. }

  33. class MyBufferedReader {
  34.         /**
  35.          * 自己写一个类似BufferedReader功能的方法
  36.          */
  37.         private FileReader fr;

  38.         MyBufferedReader(FileReader fr) {
  39.                 this.fr = fr;
  40.         }

  41.         // 类似readline()方法
  42.         public String myReadLine() throws IOException {
  43.                 StringBuilder sb = new StringBuilder();

  44.                 int ch = 0;
  45.                 while ((ch = fr.read()) != -1) {
  46.                         if (ch == '\r') {
  47.                                 continue;
  48.                         } else if (ch == '\n') {
  49.                                 return sb.toString();
  50.                         } else {
  51.                                 sb.append((char) ch);
  52.                         }
  53.                 }
  54.                 if (sb.length() != 0)
  55.                         return sb.toString();
  56.                 return null;
  57.         }

  58.         public void close() throws IOException {
  59.                 fr.close();
  60.         }
  61. }
复制代码



8、从自己编写的缓冲区方法浅谈装饰者模式,以及他和继承的区别
  1. package com.itheima.io;

  2. import java.io.FileReader;
  3. import java.io.IOException;
  4. import java.io.Reader;

  5. /*class MyLineNumberReader {
  6.         private Reader r;
  7.         private int lineNumber;

  8.         public int getLineNumber() {
  9.                 return lineNumber;
  10.         }

  11.         public void setLineNumber(int lineNumber) {
  12.                 this.lineNumber = lineNumber;
  13.         }

  14.         public MyLineNumberReader(Reader r) {
  15.                 this.r = r;
  16.         }

  17.         public String myReaderLine() throws IOException {
  18.                 lineNumber++;
  19.                 StringBuilder sb = new StringBuilder();
  20.                 int ch = 0;
  21.                 while ((ch = r.read()) != -1) {
  22.                         if (ch == '\r')
  23.                                 continue;
  24.                         else if (ch == '\n') {
  25.                                 return sb.toString();
  26.                         } else {
  27.                                 sb.append((char) ch);
  28.                         }
  29.                 }
  30.                 if (sb.length() != 0) {
  31.                         return sb.toString();
  32.                 }
  33.                 return null;
  34.         }

  35.         public void myClose() throws IOException {
  36.                 r.close();
  37.         }
  38. }*/
  39. //利用继承来简化
  40. class MyLineNumberReader extends MyBufferedReader{
  41.         private int lineNumber;

  42.         public int getLineNumber() {
  43.                 return lineNumber;
  44.         }

  45.         public void setLineNumber(int lineNumber) {
  46.                 this.lineNumber = lineNumber;
  47.         }

  48.         public MyLineNumberReader(Reader r) {
  49.                 super(r);
  50.         }

  51.         public String myReaderLine() throws IOException {
  52.                 lineNumber++;
  53.                 return super.myReadLine();
  54.         }
  55. }
  56. public class MyLineNumberReaderDemo_3_2 {

  57.         public static void main(String[] args) {
  58.                 FileReader fr = null;
  59.                 MyLineNumberReader mln = null;
  60.                 try {
  61.                         fr = new FileReader(".\\testData\\buf.txt");
  62.                         mln = new MyLineNumberReader(fr);
  63.                         String line = "";
  64.                         mln.setLineNumber(100);
  65.                         while ((line = mln.myReaderLine()) != null) {
  66.                                 System.out.println(mln.getLineNumber()+">>"+line);
  67.                         }
  68.                 } catch (IOException e) {
  69.                         // TODO Auto-generated catch block
  70.                         e.printStackTrace();
  71.                 }

  72.         }

  73. }
复制代码

9、编写自己的LineNumberReader,并用继承来简化
  1. package com.itheima.io;

  2. import java.io.FileReader;
  3. import java.io.IOException;
  4. import java.io.Reader;

  5. /*class MyLineNumberReader {
  6.         private Reader r;
  7.         private int lineNumber;

  8.         public int getLineNumber() {
  9.                 return lineNumber;
  10.         }

  11.         public void setLineNumber(int lineNumber) {
  12.                 this.lineNumber = lineNumber;
  13.         }

  14.         public MyLineNumberReader(Reader r) {
  15.                 this.r = r;
  16.         }

  17.         public String myReaderLine() throws IOException {
  18.                 lineNumber++;
  19.                 StringBuilder sb = new StringBuilder();
  20.                 int ch = 0;
  21.                 while ((ch = r.read()) != -1) {
  22.                         if (ch == '\r')
  23.                                 continue;
  24.                         else if (ch == '\n') {
  25.                                 return sb.toString();
  26.                         } else {
  27.                                 sb.append((char) ch);
  28.                         }
  29.                 }
  30.                 if (sb.length() != 0) {
  31.                         return sb.toString();
  32.                 }
  33.                 return null;
  34.         }

  35.         public void myClose() throws IOException {
  36.                 r.close();
  37.         }
  38. }*/
  39. //利用继承来简化
  40. class MyLineNumberReader extends MyBufferedReader{
  41.         private int lineNumber;

  42.         public int getLineNumber() {
  43.                 return lineNumber;
  44.         }

  45.         public void setLineNumber(int lineNumber) {
  46.                 this.lineNumber = lineNumber;
  47.         }

  48.         public MyLineNumberReader(Reader r) {
  49.                 super(r);
  50.         }

  51.         public String myReaderLine() throws IOException {
  52.                 lineNumber++;
  53.                 return super.myReadLine();
  54.         }
  55. }
  56. public class MyLineNumberReaderDemo_3_2 {

  57.         public static void main(String[] args) {
  58.                 FileReader fr = null;
  59.                 MyLineNumberReader mln = null;
  60.                 try {
  61.                         fr = new FileReader(".\\testData\\buf.txt");
  62.                         mln = new MyLineNumberReader(fr);
  63.                         String line = "";
  64.                         mln.setLineNumber(100);
  65.                         while ((line = mln.myReaderLine()) != null) {
  66.                                 System.out.println(mln.getLineNumber()+">>"+line);
  67.                         }
  68.                 } catch (IOException e) {
  69.                         // TODO Auto-generated catch block
  70.                         e.printStackTrace();
  71.                 }

  72.         }

  73. }
复制代码




评分

参与人数 1黑马币 +5 收起 理由
格子、 + 5 神马都是浮云

查看全部评分

3 个回复

倒序浏览
怎么笔记全是代码:o
回复 使用道具 举报
格子、 发表于 2014-8-27 07:07
怎么笔记全是代码

因为直接在写代码的时候加的注释,有时间在编辑把它提取出来
回复 使用道具 举报
胡天杭 发表于 2014-8-27 09:41
因为直接在写代码的时候加的注释,有时间在编辑把它提取出来

养成一个好习惯哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马