黑马程序员——Java IO总结(二)
2011-12-21 22:56
330 查看
黑马程序员——Java IO总结(二)
---------------------- android培训、java培训、期待与您交流!
----------------------
一、字符流的缓冲区
l 缓冲区的出现提高了对数据的读写效率
l 对应类
BufferedWriter
BufferedReader
l 缓冲区要结合流才可以使用。
l 在流的基础上对流的功能进行了增强。
l 实例:字符写入流缓冲区实例
l 实例:字符读取流缓冲区实例
l 实例:通过缓冲区复制文本文件
l 装饰设计模式
当想要对已有的对象进行增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能,那么自定义的类称为装饰类。
l 实例:模拟一个带行号的缓冲区对象
二、字节流操作
l 字节流基类:InputStream、OutputStream
l 实例:字节流的读写
l 实例:复制图片
l 实例:通过缓冲区复制mp3文件
l 实例:读取键盘录入
l 实例:读取键盘录入(使用转换流InputStreamReader)
---------------------- android培训、java培训、期待与您交流!
----------------------
详细请查看:http://edu.csdn.net/heima
---------------------- android培训、java培训、期待与您交流!
----------------------
一、字符流的缓冲区
l 缓冲区的出现提高了对数据的读写效率
l 对应类
BufferedWriter
BufferedReader
l 缓冲区要结合流才可以使用。
l 在流的基础上对流的功能进行了增强。
l 实例:字符写入流缓冲区实例
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class BufferedWriterDemo { public static void main(String[] args) throws IOException { FileWriter writer = new FileWriter("buffer.txt"); // 为了提高字符写入效率,加入了缓冲技术 BufferedWriter br = new BufferedWriter(writer); br.write("中国"); br.newLine(); // 插入跨平台的换行符 br.write("Java技术"); // 只要用到缓冲区,就要记得刷新 br.flush(); // 其实关闭缓冲区,就是关闭缓冲区中的流对象 br.close(); } }
l 实例:字符读取流缓冲区实例
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class BufferedReaderDemo { public static void main(String[] args) throws IOException { FileReader reader = new FileReader("buffer.txt"); BufferedReader br = new BufferedReader(reader); String line = null; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); } }
l 实例:通过缓冲区复制文本文件
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class TextFileCopyBuf { public static void main(String[] args) { BufferedReader br = null; BufferedWriter bw = null; try { br = new BufferedReader(new FileReader("buffer.txt")); bw = new BufferedWriter(new FileWriter("d:\\buffer.txt")); String line = null; while ((line = br.readLine()) != null) { bw.write(line); bw.newLine(); bw.flush(); } } catch (Exception e) { throw new RuntimeException("文件读写失败!"); } finally { try { if (br != null) br.close(); } catch (IOException e) { throw new RuntimeException("读取关闭失败!"); } try { if (bw != null) bw.close(); } catch (IOException e) { throw new RuntimeException("写入关闭失败!"); } } } }
l 装饰设计模式
当想要对已有的对象进行增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能,那么自定义的类称为装饰类。
l 实例:模拟一个带行号的缓冲区对象
import java.io.FileReader; import java.io.IOException; import java.io.Reader; public class MyLineNumberReader { private Reader r; private int lineNumber; public MyLineNumberReader(Reader r) { super(); this.r = r; } public int getLineNumber() { return lineNumber; } public void setLineNumber(int lineNumber) { this.lineNumber = lineNumber; } public String readLine() throws IOException { StringBuilder sb = new StringBuilder(); lineNumber++; int ch = 0; while ((ch = r.read()) != -1) { if (ch == '\r') continue; else if (ch == '\n') return sb.toString(); else sb.append((char) ch); } if (sb.length() > 0) return sb.toString(); return null; } public void close() throws IOException { r.close(); } public static void main(String[] args) throws IOException { FileReader r = new FileReader("FileReaderDemo_copy.java"); MyLineNumberReader lnr = new MyLineNumberReader(r); String line = null; lnr.setLineNumber(100); while ((line = lnr.readLine()) != null) { System.out.println(lnr.getLineNumber() + ": " + line); } lnr.close(); } }
二、字节流操作
l 字节流基类:InputStream、OutputStream
l 实例:字节流的读写
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class FileOutputStreamDemo { public static void main(String[] args) throws IOException { // writeFile(); readFile3(); } public static void readFile1() throws IOException { FileInputStream fis = new FileInputStream("fos.txt"); int ch = 0; while ((ch = fis.read()) != -1) { System.out.print((char) ch); } fis.close(); } public static void readFile2() throws IOException { FileInputStream fis = new FileInputStream("fos.txt"); int len = 0; byte[] buf = new byte[1024]; while ((len = fis.read(buf)) != -1) { System.out.println(new String(buf, 0, len)); } fis.close(); } public static void readFile3() throws IOException { FileInputStream fis = new FileInputStream("fos.txt"); byte[] buf=new byte[fis.available()]; fis.read(buf); System.out.println(new String(buf)); fis.close(); } public static void writeFile() throws IOException { FileOutputStream fos = new FileOutputStream("fos.txt"); fos.write("HelloWorld".getBytes()); fos.close(); } }
l 实例:复制图片
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; // 复制图片 public class CopyPic { public static void main(String[] args) { FileOutputStream fos = null; FileInputStream fis = null; try { fis = new FileInputStream("c:\\a.jpg"); fos = new FileOutputStream("c:\\b.jpg"); byte[] buf = new byte[1024]; int len = 0; while ((len = fis.read(buf)) != -1) { fos.write(buf, 0, len); } } catch (Exception e) { throw new RuntimeException(e); } finally { try { if (fis != null) fis.close(); } catch (IOException e) { e.printStackTrace(); } try { if (fos != null) fos.close(); } catch (IOException e) { e.printStackTrace(); } } } }
l 实例:通过缓冲区复制mp3文件
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyMp3 { public static void main(String[] args) throws IOException { long start = System.currentTimeMillis(); copy_1(); long end = System.currentTimeMillis(); System.out.println(end - start); } // 通过字节流的缓冲区完成复制 public static void copy_1() throws IOException { BufferedInputStream bufis = new BufferedInputStream( new FileInputStream("d:/1.mp3")); BufferedOutputStream bufos = new BufferedOutputStream( new FileOutputStream("d:/1_copy.mp3")); int b = 0; while ((b = bufis.read()) != -1) { bufos.write(b); } bufis.close(); bufos.close(); } }
l 实例:读取键盘录入
import java.io.IOException; import java.io.InputStream; public class ReadIn { public static void main(String[] args) throws IOException { InputStream in = System.in; StringBuilder sb = new StringBuilder(); while (true) { int ch = in.read(); if (ch == '\r') continue; else if (ch == '\n') { String s = sb.toString(); sb.delete(0, sb.length()); if ("over".equals(s)) break; System.out.println(s); continue; } sb.append((char) ch); } } }
l 实例:读取键盘录入(使用转换流InputStreamReader)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class ReadIn { public static void main(String[] args) throws IOException { InputStream in = System.in; BufferedReader br = new BufferedReader(new InputStreamReader(in)); String line = null; while ((line = br.readLine()) != null) { if ("over".equals(line)) { break; } System.out.println(line); } } }
---------------------- android培训、java培训、期待与您交流!
----------------------
详细请查看:http://edu.csdn.net/heima
相关文章推荐
- 黑马程序员-javaIO总结
- 黑马程序员——java基础——IO的学习总结
- 黑马程序员+Java中IO的总结
- 黑马程序员:Java基础总结----集合与IO的结合[Properties类]
- 黑马程序员——Java学习总结:IO常用方法练习
- 黑马程序员学习log第六篇基础知识:JAVA的面向对象之IO总结
- 黑马程序员 知识点总结-Java IO(二)字符流
- 黑马程序员 知识点总结-Java IO(三)字节流
- 黑马程序员——Java IO总结一
- 黑马程序员——Java IO总结二
- 黑马程序员——Java IO总结(一)
- 黑马程序员——Java学习总结 IO部分
- 黑马程序员 Java学习总结之IO和网络
- 黑马程序员java自学总结--IO
- 黑马程序员---java的IO系统学习总结
- 黑马程序员-Java基础-IO总结
- 黑马程序员-Java IO的学习总结
- 黑马程序员 知识点总结-Java IO(四)转换流、打印流
- 黑马程序员_java IO技术学习总结
- 黑马程序员_Java第18天知识总结_System类_Runtime类_Date_Calendar_Math_Random_InputStream_OutputStream_IO异常的处理