黑马程序员-探究字符流一
来源:互联网 发布:微店和淘宝店发展趋势 编辑:程序博客网 时间:2024/06/06 20:23
------- <a target="blank">android培训</a>、<a target="blank">java培训</a>、期待与您交流! -------
package it.heima.mylog;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class FileReaderAndFileWriter {
/**
* 第一训练:* 1,读取一个已有的文本文件,使用字符读取流和文件相关联。
* FileReader fr = new FileReader("IO.txt");
* 2,创建一个目的,用于存储读到的数据。
* FileWriter fw = new FileWriter("IO2.txt");
* 3,频繁的读写操作
* int ch = 0; while((ch = fr.read()) != -1){ fw.write(ch); }
* 4,关闭流
* fr.close();
* fw.close();
**********************************************************
* 第二训练:
* FileReader fr = null;
* FileWriter fw = null; try{ fr = new FileReader("IO3.txt"); fw = new FileWriter("IO4.txt");
* 创建一个临时容器,用于缓存读到的字符。
* char[] buf = new char[1024];
* 定义一个变量记录读到的字符串,其实就是往数组里装的字符个数。
* int len = 0; while((len = fr.read(buf)) != -1){ fw.write(buf,0,len); } }
* catch(Exception e){ System.out.println("读写失败"); throw new RuntimeException("读写失败");}
* finally{ if(fw != null) try{ fw.close(); }catch(IOException e){
* e.printStackTrace(); } if(fr != null) try{ fr.close();
* }catch(IOException e){ e.printStackTrace(); } }
**********************************************************
* 第三训练
* FileReader fr = new FileReader("IO3.txt");
* BufferedReader buff = new BufferedReader(fr); String line = null;
* while((line = buff.readLine()) != null){ System.out.println(line); }
**********************************************************
* 第四训练
* FileWriter fw = new FileWriter("IO6.txt");
* 为了提高写入的效率,使用了字符流的缓冲区。
* 创建一个字符写入流的缓冲区对象,并和指定要被缓冲的流对象相关联
* BufferedWriter bufw = new BufferedWriter(fw);
* 使用缓冲区的写入方法现将数据写入到缓冲区中。
* bufw.write("dvghdghka"+"hjkvhdskjvnsdljvnlsd");
* bufw.write("scjnlcnzljckadf"); bufw.newLine();
* bufw.write("heheheehehe"); for(int x = 1; x <= 4; x++){
* bufw.write("jdksfjksdl"+x); bufw.newLine(); bufw.flush();//自动刷 }
* 使用缓冲区的刷新方法将数据刷到目的地中 bufw.flush(); //关闭缓冲区。就是关闭被缓冲的流对象 bufw.close();
**********************************************************
* 第五训练
* FileReader fr = new FileReader("IO5.txt");
* BufferedReader bufr = new BufferedReader(fr);
* FileWriter fw = new FileWriter("IO9.txt");
* BufferedWriter bufw = new BufferedWriter(fw);
* String line = null;
* while((line = bufr.readLine()) != null){ bufw.write(line);bufw.newLine(); bufw.flush(); }
* int ch = 0; while((ch = bufr.read()) != -1){ bufw.write(ch); }
* bufr.close(); bufw.close();
* **********************************************************
* 第六训练
* 自定义的读取缓冲区,就是模拟一个Bufferedreader.
*
* 分析:
* 1,缓冲区其实就是一个封装了的数组。
* 2,并对外提供了更多的方法对数组进行访问。
* 3,这些方法最终操作的都是数组角标。
*
* 缓冲的原理:
* 1,缓冲区的原理是从源中获取一批一批数据装进缓冲区中。
* 2,在从缓冲区中不断的取一个一个数据。
* 3,在此次取完后,在从缓冲区继续取一批数据进缓冲区。
* 4,当源中的数据取光时,用-1作为结束标记。
*
* MyBufferedReader
*/
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("IO9.txt");
MyBufferedReader bufr = new MyBufferedReader(fr);
String line = null;
while ((line = bufr.myReadLine()) != null) {
System.out.println(line);
}
bufr.close();
}
}
class MyBufferedReader extends Reader {
// 注意:继承Reader类必须实现或重写read(char[],int,int),close()方法。
private Reader r;
// 定义一个字符数组char[],作为缓冲区。
private char[] buf = new char[1024];
// 定义一个指针pos,用于操作这个数组中的元素。当操作到最后一个元素时,指针应归零。
private int pos = 0;
// 定义一个计数器count,用于记录缓冲区中数据的个数。当该数据见到0时,就从源中继续获取数据到缓冲区中。
private int count = 0;
MyBufferedReader(Reader r) {
this.r = r;
}
public int myRead() throws IOException {
// 从源中获取一批数据到缓冲区中,需要先做判断,只有计数器为零时才需要从源中获取数据。
// 每次从源中获取数据后,指针pos要归零。
if (count == 0) {
count = r.read(buf);
pos = 0;
}
if (count < 0) {
return -1;
}
char ch = buf[pos++];
count--;
return ch;
}
public String myReadLine() throws IOException {
StringBuilder sb = new StringBuilder();
// 将从缓冲区中读到的字符,存储到缓冲行数据的缓冲区中
int ch = 0;
while ((ch = myRead()) != -1) {
if (ch == '\r')
continue;
if (ch == '\n')
return sb.toString();
sb.append((char) ch);
}
if (sb.length() != 0)
return sb.toString();
return null;
}
public int read(char[] cbuf, int off, int len) throws IOException {
return 0;
}
@Override
public void close() throws IOException {
r.close();
}
}
/*
* 每日单词: IDE Integrated Development Environment 集成开发环境 API Application
* Programming Interface 应用程序编程接口 GUI Graphics User Interface 图形用户界面 DBMS Data
* Base XXXX System 数据库管理系统 IDL Interface Definition Language 接口定义语言 AWT
* Abstrack Windows TooleKit 抽象窗口工具箱 abstrack windows toolekit abstrack windows
* toolekit abstrack windows toolekit
* 错误 数据库管理系统 management 管理 management management man age ment 男人 年龄 ment
* management管理
*/
//------------------------------------------------------------------------------------------------------------------------------------2014年3月14日 星期五 整理
------- <a target="blank">android培训</a>、<a target="blank">java培训</a>、期待与您交流! ------- 0 0
- 黑马程序员-探究字符流一
- 黑马程序员-字符流
- 黑马程序员--字符流
- 黑马程序员-探究字节流二
- 黑马程序员-探究字节流三
- 黑马程序员_IO流-字符流的学习(一)
- 黑马程序员——io流(一)字符流
- 黑马程序员--java基础--IO流(一)字符流
- 黑马程序员——一维数组指针探究
- 黑马程序员-字符流编码
- 黑马程序员_IO_字符流
- 黑马程序员_IO_字符流
- 黑马程序员_Java(字符流)
- 黑马程序员--深入探究多线程
- 黑马程序员-探究字节流五(其他流)
- 黑马程序员——IO(一)字符流,字节流,缓冲流,转换流
- 黑马程序员_IO流一(IO流概述,字符流,FileWriter,FileReader)
- 黑马程序员--IO(一)--概述、字符流、字节流、流操作规律
- 范围
- poj 3122 pie
- Struts2中的ModelDriven机制及其运用【转】
- Java switch
- poj 1185
- 黑马程序员-探究字符流一
- 虚拟内存页号 to 物理内存页号
- 归并排序算法的原理及JAVA实现
- Javascript_javascript中的六种类型与typeof()
- 第二周作业
- Spring工作原理
- 安装VisualSVN Server提示服务无法启用
- 雅虎14条-Best Practices for Speeding Up Your Web Site
- ZOJ-2095