java基础知识回顾之javaIO类---BufferedReader和BufferedWriter
使用了装饰设计模式:此类的设计是为了提高流操作数据的效率。思想就是定义容器将数据进行临时存储,对于缓冲区对象,其实就是将这个容器进行了分装,并提供了更高效的操作方法。
BufferReader:
package com.lp.ecjtu; import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException; public class BufferReaderDemo { /**
* @param args
* @throws IOException
*
* 该缓冲去提供了一个的读取一行 readLine()方法,当返回null时读到末尾
*/
public static void main(String[] args) throws IOException {
//创建一个读取流对象和文件相关联
FileReader fr = new FileReader("FileReaderDemo.java");
//为了提高字符读取的效率,加入缓冲技术
//将需要被提高效率的流对象作为参数传入缓冲区的构造方法即可
BufferedReader bw = new BufferedReader(fr);
String line = null;
/*line = bw.readLine();
System.out.println("******"+line);//一次性读取一行
String line1 = bw.readLine();
System.out.println("******"+line1);
String line2 = bw.readLine();
System.out.println("******"+line2);*/
while((line=bw.readLine()) != null){
System.out.println(line);
}
bw.close(); } }
BufferWriter:
package com.lp.ecjtu; import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException; public class BufferWriterDemo { /**
* @param args
* @throws IOException
*
* 该缓冲去提供了一个跨平台的换行符 newLine方法
*/
public static void main(String[] args) throws IOException {
//创建一个字符写入流对象
FileWriter fw = new FileWriter("buf.txt");
//为了提高字符写入的效率,加入缓冲技术
//将需要被提高效率的流对象作为参数传入缓冲区的构造方法即可
BufferedWriter bw = new BufferedWriter(fw);
for(int i=0;i<5;i++){
bw.write("abcd"+i);
bw.newLine();
bw.flush();
}
}
}
通过缓冲区将一个文本的内容复制到另一个文件当中:
package com.lp.ecjtu; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; public class CopyTextByBuffer { /**
* @param args
* readLine()方法返回回车符之前数据的内容,并不返回回车符,可以通过newLine()方法换行
*/
public static void main(String[] args) {
BufferedReader bufr = null;
BufferedWriter bufw = null;
try {
bufr = new BufferedReader(new FileReader("FileReaderDemo.java"));
bufw = new BufferedWriter(new FileWriter("bufferWriterCopy.txt"));
String line = null;
while((line=bufr.readLine())!=null){
bufw.write(line);
bufw.newLine();
bufw.flush();
}
} catch (FileNotFoundException e) {
throw new RuntimeException("没有找到指定文件!请确认文件名称是否正确!");
}catch (IOException e) {
throw new RuntimeException("读写失败!");
}finally{
try {
if(bufr != null){
bufr.close();
}
} catch (IOException e) {
throw new RuntimeException("读取关闭失败!");
}
try {
if(bufw != null){
bufw.close();
}
} catch (IOException e) {
throw new RuntimeException("写入关闭失败!");
}
}
}
}
原理;
1,使用流的read方法从源中读取一批数据存储到缓冲区的数组中。
2,通过计数器记录住存储的元素个数。
3,通过数组的角标来获取数组中的元素(从缓冲区中取数据).
4,指针会不断的自增,当增到数组长度,会归0.计数器会自减,当减到0时,就在从源拿一批数据进缓冲区。
package com.lp.ecjtu; import java.io.FileReader;
import java.io.IOException; class MybufferReader {
private FileReader r;
public MybufferReader(FileReader r){
this.r = r;
}
//可以一次性读一行数据的方法
public String myreadLine() throws IOException{
StringBuilder sb = new StringBuilder();
int ch = 0;
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 MybufferReaderDemo{
public static void main(String[] args) throws IOException{
FileReader fr = new FileReader("buf.txt");
MybufferReader mybuffer = new MybufferReader(fr);
String line = null;
while((line =mybuffer.myreadLine())!= null){
System.out.println(line);
}
mybuffer.myClose();
}
}
java基础知识回顾之javaIO类---BufferedReader和BufferedWriter的更多相关文章
- java基础知识回顾之javaIO类总结
java IO体系图 IO流的操作规律总结: 1,明确体系: 数据源:InputStream ,Reader 数据汇:OutputStream,Writer 2,明确数据:因为数据分两种:字节,字符. ...
- java基础知识回顾之javaIO类---InputStreamReader和OutputStreamWriter转化流
InputStreamReader:是字节流通向字符流的桥梁: OutputStreamWriter 是字符流通向字节流的桥梁: package com.lp.ecjtu; import java.i ...
- java基础知识回顾之javaIO类---FileWriter和FileReader
FileWriter类的构造方法定义如下: 1.public FileWriter(File file)throws IOException 字符流的操作比字节流操作好在一点,就是可以直接输出字符串了 ...
- java基础知识回顾之javaIO类--RandomAccessFile类
java.io 类 RandomAccessFile java.lang.Object java.io.RandomAccessFile1.该类不是IO流中的子类.2.该类既能读又能写.3.该对象内部 ...
- java基础知识回顾之javaIO类--java序列化和反序列化
/** * * 一:理解序列化反序列化及其应用 * 序列化:把堆内存的对象转化成字节流的过程. * 反序列化:把字节流序列恢复重构成对象的过程. * 对象的序列化的用途:1.把对象的字节序列持久化, ...
- java基础知识回顾之javaIO类--File类应用:过滤器接口FilenameFilter和FileFilter
FilenameFilter和FileFilter都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码:通过使用File类中String[] list(FilenameFi ...
- java基础知识回顾之javaIO类--File类
File类是对文件系统中文件以及目录(文件夹)进行封装的对象,可以通过面向对象的思想来操作文件和目录(文件夹).File类保存文件或目录的各种元素的信息,包括文件名,文件长度,最后修改日期,是否可读, ...
- java基础知识回顾之javaIO类---BufferedInputStream和BufferedOutputStream
MP3的复制过程: package com.lp.ecjtu; import java.io.BufferedInputStream; import java.io.BufferedOutputStr ...
- java基础知识回顾之javaIO类---FileInputStream和FileOutputStream字节流复制图片
package com.lp.ecjtu; import java.io.FileInputStream; import java.io.FileNotFoundException; import j ...
随机推荐
- “猜你喜欢”是怎么猜中你心思的?
文/Joseph A. Konstan & John Riedl)如今,到网上购物的人已经习惯了收到系统为他们做出的个性化推荐.Netflix 会推荐你可能会喜欢看的视频.TiVo 会自动把节 ...
- 6.24 AppCan移动开发者大会,我爱我家即将闪亮登场!
6.24 AppCan移动开发者大会进入倒计时,报名通道即将关闭! “6月24日, 2016AppCan移动开发者大会即将召开,以“平台之上,应用无限”为主题,1500位行业精英汇聚在此,重磅新品发布 ...
- 【Javascript】: for循环中定义的变量在for循环体外也有效
for循环中定义的变量在for循环体外也有效 <script> (function(){ var a = 111; for(var i=0;i<5;i++){ var carl = ...
- CoverFlow效果
1. 成员函数 mCamera是用来做类3D效果处理,比如z轴方向上的平移,绕y轴的旋转等 mMaxRotationAngle是图片绕y轴最大旋转角度,也就是屏幕最边上那两张图片的旋转角度 mMaxZ ...
- scjp考试准备 - 2 - 逻辑运算及类型转换
判断如下代码的执行结果: public class Spock{ public static void main(String[] args){ Long tail = 2000L; Long dis ...
- json转换对象
JSON.parse(jsonstr); //可以将json字符串转换成json对象 JSON.stringify(jsonobj); //可以将json对象转换成json对符串
- C++中的static关键字(转)
原出处:http://blog.csdn.net/hackbuteer1/article/details/7487694 C++的static有两种用法:面向过程程序设计中的static和面向对象程序 ...
- c语言编写的日历
输入年份如2013,显示2013年的日历. 思路: 1.查找每个月1号是星期几(这里利用了1990年1月1号是星期一) 计算年份如2013年1月1号到1990年1月1号有Days天,Day%7得到星期 ...
- 设计模式之Birdge(桥接)模式
1.出现原因 1.同一个类型,有两个变化的维度(两个维度的抽象:一个抽象部分的抽象,一个实现部分的抽象) 2.如何应对这种“多维度的变化”?如何利用面向对象技术来使得同一类型可以轻松地沿着两个方向变化 ...
- 【转】linux root用户ifconfig报command not found
解决办法: 方法一: 直接输入su - 回车.就可以ifconfig了 方法二: /etc/profile 把下面if语句注释掉: #path Manipulation if ["EUID& ...