第十二章 java流与文件操作 第二讲
二 缓冲字符流的应用 BufferedReader BufferedWriter
1.缓冲字符流出现的原因:FileReader对象,每次调用read()方法进行读操作时,都会直接去文件中读取字节,转换成字符并返回,这样频繁的读取文件效率很低。
2. 缓冲字符流的优点:是为了提高效率。
3. 缓冲字符的原理:就是对数组进行封装。因为在运用缓冲的过程中,在读取时是在调用read(),当调用的字符已满所定的内存时,就会封装成数组去访问磁盘文件。
4. 缓冲字符的构造方法:
public BufferedReader(Readerin);
注意:参数Reader是BufferedReader的父类,只要是Reader的子类都可以传过来,体现了类的多态性。
public BufferedReader(Readerin, intsz);
注意:intsz 是制定缓冲区的内存容量
public BufferedWriter(Writerout) ;
public BufferedWriter(Writerout, intsz);
5.对缓冲字符流的实例的部分代码:----蓝色部分是会缓冲流的创建
FileWriter fw=null;
BufferedWriter bw=null;
try {
fw = new FileWriter("demo.txt");//字符的输出流,数据的写入
bw = new BufferedWriter(fw);//构建缓冲的字符流,对已有流的封装
bw.write("hell0");
bw.newLine();//增加换行符
bw.write("java");
bw.newLine();
bw.flush();//把缓冲区的内容刷新到目的地
}
6. 缓冲字符流有几个特有的方法:
public String readLine();
public void newLine();
对readLine()方法的使用的部分代码:
FileReader fr = null;
BufferedReader br = null;
try {
fr=new FileReader("res/demo.txt");
br = new BufferedReader(fr,255);//255指定缓冲区
String str= null;
while((str=br.readLine())!=null){
System.out.print(str);
}
7.在懂得缓冲流方法中的readLine()的原理后,可以根据原理自己创建一个缓冲流的类,下面是一个缓冲流类的实例:
import java.io.*;
public class MyBufferedReader {
//类的属性,代表普通 的字符输入流对象,修饰的对象
private Reader r;//利用自己类的父类可以接受子类,从而体现多态性
//构造方法
static int n=1;
public MyBufferedReader(Reader r){//体现多态性
this.r=r;
}
//readLine()方法:实现的功能是读一行,增加缓冲区,然后调用r对象的read()读取字符放在缓冲区中,
//当读到行标记时,就把缓冲区中的字符中的字符转换成字符串返回
public String readLine(){
//缓冲区
StringBuffer strB = new StringBuffer();
int ch = 0;
try {
while((ch=r.read())!=-1){
//'\r'和'\n'是回车换行,只有在两个都存在时才可实现
if(ch=='\r'){
continue;
}
if(ch=='\n'){
return (n++)+"\t"+new String(strB);// 等价 strB.toString()
}else{
strB.append((char)ch);//追加放置在缓冲区里
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//当读到最后一行的时候,判断最后一行是否到结尾,是否有字符返回。
if((strB.length())!=0){
return new String(strB);
}
return null;
}
//close()方法
public void close(){
try {
r.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
8.装饰设计模式和继承的区别
装饰设计模式比继承有更好的灵活性。因为装饰模式和继承相比,继承中的类在建立缓冲字符流时,是在每次使用时建立一个,这样的重复性会很大,如果用装饰模式,可以只建立一个类,只要在使用时调用它就行了。就好比是抽象类、接口一样,把共同的东西提前出来。
当然,每个事物都是有两方面的,有优点必定有缺点。
出现的新的问题:该类虽然完成对已有两个对象的增强。但是当有新的对象出现时,还要继续在该类中添加构造函数。这样不利于扩展和维护。
二 缓冲字符流的应用 BufferedReader BufferedWriter
1.缓冲字符流出现的原因:FileReader对象,每次调用read()方法进行读操作时,都会直接去文件中读取字节,转换成字符并返回,这样频繁的读取文件效率很低。
2. 缓冲字符流的优点:是为了提高效率。
3. 缓冲字符的原理:就是对数组进行封装。因为在运用缓冲的过程中,在读取时是在调用read(),当调用的字符已满所定的内存时,就会封装成数组去访问磁盘文件。
4. 缓冲字符的构造方法:
public BufferedReader(Readerin);
注意:参数Reader是BufferedReader的父类,只要是Reader的子类都可以传过来,体现了类的多态性。
public BufferedReader(Readerin, intsz);
注意:intsz 是制定缓冲区的内存容量
public BufferedWriter(Writerout) ;
public BufferedWriter(Writerout, intsz);
5.对缓冲字符流的实例的部分代码:----蓝色部分是会缓冲流的创建
FileWriter fw=null;
BufferedWriter bw=null;
try {
fw = new FileWriter("demo.txt");//字符的输出流,数据的写入
bw = new BufferedWriter(fw);//构建缓冲的字符流,对已有流的封装
bw.write("hell0");
bw.newLine();//增加换行符
bw.write("java");
bw.newLine();
bw.flush();//把缓冲区的内容刷新到目的地
}
6. 缓冲字符流有几个特有的方法:
public String readLine();
public void newLine();
对readLine()方法的使用的部分代码:
FileReader fr = null;
BufferedReader br = null;
try {
fr=new FileReader("res/demo.txt");
br = new BufferedReader(fr,255);//255指定缓冲区
String str= null;
while((str=br.readLine())!=null){
System.out.print(str);
}
7.在懂得缓冲流方法中的readLine()的原理后,可以根据原理自己创建一个缓冲流的类,下面是一个缓冲流类的实例:
import java.io.*;
public class MyBufferedReader {
//类的属性,代表普通 的字符输入流对象,修饰的对象
private Reader r;//利用自己类的父类可以接受子类,从而体现多态性
//构造方法
static int n=1;
public MyBufferedReader(Reader r){//体现多态性
this.r=r;
}
//readLine()方法:实现的功能是读一行,增加缓冲区,然后调用r对象的read()读取字符放在缓冲区中,
//当读到行标记时,就把缓冲区中的字符中的字符转换成字符串返回
public String readLine(){
//缓冲区
StringBuffer strB = new StringBuffer();
int ch = 0;
try {
while((ch=r.read())!=-1){
//'\r'和'\n'是回车换行,只有在两个都存在时才可实现
if(ch=='\r'){
continue;
}
if(ch=='\n'){
return (n++)+"\t"+new String(strB);// 等价 strB.toString()
}else{
strB.append((char)ch);//追加放置在缓冲区里
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//当读到最后一行的时候,判断最后一行是否到结尾,是否有字符返回。
if((strB.length())!=0){
return new String(strB);
}
return null;
}
//close()方法
public void close(){
try {
r.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
8.装饰设计模式和继承的区别
装饰设计模式比继承有更好的灵活性。因为装饰模式和继承相比,继承中的类在建立缓冲字符流时,是在每次使用时建立一个,这样的重复性会很大,如果用装饰模式,可以只建立一个类,只要在使用时调用它就行了。就好比是抽象类、接口一样,把共同的东西提前出来。
当然,每个事物都是有两方面的,有优点必定有缺点。
出现的新的问题:该类虽然完成对已有两个对象的增强。但是当有新的对象出现时,还要继续在该类中添加构造函数。这样不利于扩展和维护。
分享到:
相关推荐
根据提供的信息,我们可以总结出以下关于《Java语言程序设计基础第十版》第十二章的一些关键知识点及解答: ### 一、异常处理基本概念 #### 12.1 **问题:** 异常处理的主要思想是什么? **解答:** 异常处理的主要...
Java输入输出流(I/O流)是Java编程中不可或缺的一部分,它允许程序处理数据的读取和写入操作。在Java中,一切皆为对象,所以输入和输出操作也被抽象成了一系列的类,这些类构成了Java I/O系统的核心。本章主要涵盖...
第2章 平台无关 第3章 安全 第4章 网络移动性 第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑...
第2章 Java基础.pptx 第3章 数组.pptx 第4章 类和对象(1).pptx 第4章 类和对象(2).pptx 第5章 类的继承.pptx 第6章 抽象类和接口.pptx 第7章 多态.pptx 第8章 包装器类.pptx 第9章 内部类.pptx
Java文件操作是编程中常见的任务,...以上只是Java文件操作的一部分知识点,实际开发中还会涉及文件权限控制、并发访问、流操作等更多内容。了解并熟练掌握这些知识点,能帮助开发者高效、安全地处理各种文件操作需求。
这可能涉及到对信号值进行转换,比如将二进制数据转换成十进制或十六进制,或者进行浮点数计算。 在实际应用中,解析DBC文件的JAVA程序可能会被集成到更复杂的系统中,如汽车诊断工具、数据记录器或仿真环境。这些...
在北大青鸟S1JAVA课程的第十二章中,学员们会接触到一系列深入的Java编程概念和实践。这一章节的课后练习旨在巩固所学知识,提升编程技能。以下是本章涉及的一些关键知识点: 1. **面向对象编程基础**:在Java中,...
### Java第三十五至三十六讲知识点总结:输入输出流 #### 一、输入输出流概述 在Java中,输入输出流是进行数据读写的重要工具。主要包括以下几类: 1. **字节流**:主要涉及`InputStream`(输入字节流)和`...
《Java开发实战经典》是许多Java初学者的重要学习资料,其第十二章涵盖了诸多关键知识点。这章可能涉及了面向对象编程的深入理解、异常处理、集合框架的使用、多线程、网络编程或者IO流等内容。课后习题通常用于巩固...
第23章可能涉及输入输出流(I/O流),这是处理文件读写、网络通信的基础。学习如何使用FileInputStream、FileOutputStream,以及掌握缓冲区的概念,如BufferedReader和BufferedWriter,能有效提升数据传输效率。 第...
第2章 平台无关 第3章 安全 第4章 网络移动性 第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑...
在“Java语言程序与数据结构梁勇第十版第七章复习题答案”中,我们主要探讨的是Java编程语言的基础知识,特别是与数据结构相关的概念。Java作为一种面向对象的编程语言,对于初学者来说,理解其基本语法、类和对象、...
在本章第十四节中,我们将深入探讨文件操作控件的概念、功能以及如何在不同编程环境中实现它们。 首先,了解文件操作控件的基本概念是必要的。文件操作控件是UI中的组件,通常表现为按钮、对话框、菜单项等形式,...
在Java编程中,输入输出流(Input/Output Stream)是数据传输的核心机制,用于处理程序与外部世界的交互,包括键盘、显示器、文件和网络等。本章主要关注的是输入输出流、文件操作以及数据库操作。 12.1 输入输出流...
《Java语言程序设计(进阶篇)》是深入学习Java编程的一本重要教材,其中第21章的课后习题代码集包含了丰富的Java高级特性应用实例,旨在帮助读者巩固和提升在面向对象编程、异常处理、多线程、网络编程、IO流等方面...
12. **第十二章:Java Swing图形界面编程** - Swing组件库:JFrame、JButton、JLabel、JTextArea等 - 布局管理器:FlowLayout、BorderLayout、GridLayout、BoxLayout - AWT与Swing的区别 - Event监听机制 这些...
Java中的输入输出流(I/O流)是Java程序与外部数据源交互的重要工具,它允许程序从设备(如键盘、磁盘、网络等)读取数据或将数据写入到这些设备。在Java中,I/O流被设计为一种抽象概念,以提供与设备无关的输入输出...
第2章 发送与接收邮件 第2篇 数据库应用篇 第3章 数据库操作技术 第4章 SQL语句应用技术 第5章 复杂查询技术 第6章 数据库高级应用 第3篇 图表统计篇 第7章 JFreeChart绘图基础 第8章 基础图表技术 第9章 扩展图表...
在本节中,我们将深入探讨Java编程语言中的几个基本概念,这些都是从提供的文件【标题】"JAVA语言程序设计(基础篇)第5章答案.doc"和【描述】中提取的知识点。这些知识点主要涉及控制流(如循环和条件判断)、输入/...
第二种方法是利用Java.NIO类库,特别是`FileChannel`的`transferTo`或`transferFrom`方法。这种方法可以更有效地利用现代操作系统的底层机制,例如零拷贝(zero-copy),减少数据在用户空间和内核空间之间的复制,...