黑马程序员——Java IO总结(二)
来源:互联网 发布:伦敦陷落 知乎 编辑:程序博客网 时间:2024/04/30 07:58
黑马程序员——Java IO总结(二)
---------------------- 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
- 黑马程序员——Java IO总结(二)
- 黑马程序员——Java IO总结二
- 黑马程序员 Java IO总结二
- 黑马程序员——java---IO总结
- 黑马程序员——IO流总结之二
- 黑马程序员-Java基础总结11——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流(二)
- android有关Home按键的TYPE_KEYGUARD作用的仿照及其流程说明
- 常用设计模式
- GPRS如何有电脑上网(不用蓝牙)
- ContentProvider示例
- Xcode 4.2.* 常用快捷键 + Mac下常用快捷键(带图)
- 黑马程序员——Java IO总结(二)
- Linux下查看文件和文件夹大小
- 查看linux文件目录的大小和文件夹包含的文件数
- C++中的预处理
- 黑马程序员_java集合
- 我曾经得到的一个最好的编程建议
- RapidXml原理和使用
- php 大数据量及海量数据处理算法总结
- 功能测试