------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
1、BufferedWriter
缓冲区的出现是为了提高系统流的操作效率而出现的
所以在创建缓冲区之前,必须要先有流对象
该缓冲区中提高了一个夸平台换行
.newLine()
例
//创建一个字符写入流
FileWriter fw=new FileWriter("E:\\java_heima\\buf.txt",true);
//为了提高字符写入流效率。加入了缓冲技术
//只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可
BufferedWriter bufw=new BufferedWriter(fw);
bufw.write("abcd");
bufw.newLine();//换行命令,较通用
//记住,只要用到缓冲区,就要记得刷新
bufw.flush();
//其实关闭缓冲区,就是在关闭缓冲区中的流对象
bufw.close();
2、BufferedReader
该缓冲区提高了一次读一行的方法,方便于对文本数据的获取
当返回null结束
.readLine();
readLine方法返回的时候只返回回车符之前的数据内容,不返回回车符
readLine()方法的原理
无论是读一行,还是获取多个字符。其实最终都是在硬盘上一个一个读取
所以最终使用的还是read方法一次读一个的方法
例
//创建一个读取流对象和文件相关联
FileReader fr=new FileReader("E:\\java_heima\\demo3.txt");
//为了提高效率,加入缓冲区技术,将字符读取流对象作为参数传递给缓冲对象的
构造函数
BufferedReader bufd=new BufferedReader(fr);
String line=null;
while ((line=bufd.readLine())!=null) {
System.out.println(line);
}
//readLine() 一行一行读取
//String s1=bufd.readLine();
//System.out.println(s1);
bufd.close();
3、重写bufferedReader
明白了bufferedReader类中特有方法readLine的原理,
可以自定义一个类中包含一个功能和readLine一致的方法。
4、装饰设计模式
当想要对已有的对象进行功能增强时,
可以定义类,将已有对象传入,基于已有的功能,并提供加强功能
那么自定义是该类称为装饰类
装饰类通常会通过构造方法接收被装饰的对象
并基于被装饰的对象的功能,提供更强的功能。
5、装饰类与继承的区别
装饰模式比继承要灵活,避免了继承体系的臃肿
而且降低了类与类之间的关系
装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。
所以装饰类和被装饰类通常是都属于一个体系中的
6、LineNumberReader :行号
行号获取
FileReader fr=new FileReader("...");
LineNumberReader Inr=new LineNumberReader(fr);
string line=null;
lnr.setLineNumber(100);//表示从di100行开始
while((line=lnr.readLine())!=null)
s.o.p(lnr.getLineNumber());
7、字节流(FileInputStream,FileOutputStream,BufferedInputStream,BufferedOutputStream)
InputStream(读) OutputStream(写) ---》对计算机而言
需求:想要操作图片数据。这时就要用到字节流
available();获取文件中长度,可以用来定义数组长度
复制一个图片
1)用字节读取流对象和图片关联
2)用字节写入流对象创建一个图片文件。用于存储获取到的图片数据
3)通过循环读写,完成数据的存储。
4)关闭资源
8、InputStreamReader
字节流通向字符流的桥梁
例
InputStream in=System.in;
//将字节流转成字符流
InputStreamReader isr=new InputStreamReader(in);
//为了提高效率,将字符串进行缓冲区技术高效操作
BufferedReader bufr=new BufferedReader(isr);
String line=null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
System.out.println(line.toUpperCase());
}
bufr.close();
9、OutputStreamWriter
字符流通向字节流的桥梁
例
/*
* 1.
* 源:键盘录入 System.in
* 目的:控制台 System.out
*
* 2.键盘输入到文件上
* 源:键盘录入 System.in
* 目的:文件 new FileOutputStream("E:\\java_heima\\out.txt")
*
* 3.把文件打印到控制台上
* 源:new FileInputStream("E:\\java_heima\\out.txt")
* 目的: System.out
*
*
*/
BufferedReader bufr=
new BufferedReader(new InputStreamReader(System.in));//源
BufferedWriter bufw=
new BufferedWriter(new OutputStreamWriter(new FileOutputStream
("E:\\java_heima\\out.txt")));//目的
String line=null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
bufw.close();
10、流操作的基本规律:
困难:流对象过多,不知道该用哪一个。
解决:
1)明确源和目的
源:输入流:InputStream Reader
目的:输出流OutputStream Writer
2)操作的数据是否是纯文本
是:字符流
否:字节流
3)当体系明确后,在明确要使用哪个具体的对象
通过设备来进行区分
源设备:内存、硬盘、键盘
目的设备:内存、硬盘、控制台
例1:
需求:讲一个文本文件中数据存储到另一个文件中。即复制=文件
源: 1)因为是源,所以使用读取流:
InputStream Reader
2)是不是操作文本文件?
是!可以选择用Reader (这样体系就明确了)
3)接下来明确要使用该体系中的哪个对象。
明确设备:硬盘上一个文件
Reader体系中可以操作文件的对象是 FileReader
是否需要提高效率
是!。加入Reader体系中缓冲区 BufferedReader
FileReader fr = new FileReader("a.txt")
BufferedReader bufr=new BufferedReader(fr)
目的: 1)OutputStream Writer
2)是不是操作文本文件?
是!可以选择用 Writer
3)接下来明确要使用该体系中的哪个对象。
明确设备:硬盘 一个文件
Writer体系中可以操作文件的对象是 FileWriter
是否需要提高效率
是!。加入Reader体系中缓冲区 BufferedWriter
FileWriter fw = new FileWriter("b.txt")
BufferedWriter bufw=new BufferedWriter(fw);
-----------------------------------------------
例2:
需求:将键盘录入的数据保存到一个文本中
源: 1)InputStream Reader
2)是!可以选择用Reader
3)明确设备:键盘,对于对象是System.in
因为Reader字符流,System.in字节流
所以使用转换流:InputStreamReader
InputStreamReader isr=new InputStreamReader(System.in)
是否需要提高效率
是!。加入Reader体系中缓冲区 BufferedReader
BufferedReader bufr=new BufferedReader(isr)
目的 1)OutputStream Writer
2)是!可以选择用 Writer
3)明确设备:硬盘 一个文件
Writer体系中可以操作文件的对象是 FileWriter
FileWriter fw = new FileWriter("b.txt")
是否需要提高效率
是!。加入Reader体系中缓冲区 BufferedWriter
BufferedWriter bufw=new BufferedWriter(fw);
11、扩展一下:想要把录入的数据按照指定的编码表(utf-8),将数据存到文本中
目的: 1)OutputStream Writer
2)是!可以选择用 Writer
3)明确设备:硬盘 一个文件。 使用 FileWriter
但是FileWriter是使用的默认编码表(GBK)
需求: 存储时,按照指定的编码表(utf-8),因此指定的编码表只能转换流可以指定
所以要使用的对象是OutputStreamWriter.
而该转换流对象要接收一个字节输入出流,
而且还可以操作的文件的字节输出流:FileOutputStream
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream
("d.txt"),"UTF-8" )
是否需要提高效率
是!。加入Reader体系中缓冲区 BufferedWriter
BufferedWriter bufw=new BufferedWriter(osw);
所以:记住,转换流什么时候使用
字符与字节之间的桥梁,通常,涉及到字符编码转换时,
需要用到转换流
12、系统信息获取
Properties prop=System.getProperties();
prop.list(new PrintStream("d.txt"));
1、BufferedWriter
缓冲区的出现是为了提高系统流的操作效率而出现的
所以在创建缓冲区之前,必须要先有流对象
该缓冲区中提高了一个夸平台换行
.newLine()
例
//创建一个字符写入流
FileWriter fw=new FileWriter("E:\\java_heima\\buf.txt",true);
//为了提高字符写入流效率。加入了缓冲技术
//只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可
BufferedWriter bufw=new BufferedWriter(fw);
bufw.write("abcd");
bufw.newLine();//换行命令,较通用
//记住,只要用到缓冲区,就要记得刷新
bufw.flush();
//其实关闭缓冲区,就是在关闭缓冲区中的流对象
bufw.close();
2、BufferedReader
该缓冲区提高了一次读一行的方法,方便于对文本数据的获取
当返回null结束
.readLine();
readLine方法返回的时候只返回回车符之前的数据内容,不返回回车符
readLine()方法的原理
无论是读一行,还是获取多个字符。其实最终都是在硬盘上一个一个读取
所以最终使用的还是read方法一次读一个的方法
例
//创建一个读取流对象和文件相关联
FileReader fr=new FileReader("E:\\java_heima\\demo3.txt");
//为了提高效率,加入缓冲区技术,将字符读取流对象作为参数传递给缓冲对象的
构造函数
BufferedReader bufd=new BufferedReader(fr);
String line=null;
while ((line=bufd.readLine())!=null) {
System.out.println(line);
}
//readLine() 一行一行读取
//String s1=bufd.readLine();
//System.out.println(s1);
bufd.close();
3、重写bufferedReader
明白了bufferedReader类中特有方法readLine的原理,
可以自定义一个类中包含一个功能和readLine一致的方法。
4、装饰设计模式
当想要对已有的对象进行功能增强时,
可以定义类,将已有对象传入,基于已有的功能,并提供加强功能
那么自定义是该类称为装饰类
装饰类通常会通过构造方法接收被装饰的对象
并基于被装饰的对象的功能,提供更强的功能。
5、装饰类与继承的区别
装饰模式比继承要灵活,避免了继承体系的臃肿
而且降低了类与类之间的关系
装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。
所以装饰类和被装饰类通常是都属于一个体系中的
6、LineNumberReader :行号
行号获取
FileReader fr=new FileReader("...");
LineNumberReader Inr=new LineNumberReader(fr);
string line=null;
lnr.setLineNumber(100);//表示从di100行开始
while((line=lnr.readLine())!=null)
s.o.p(lnr.getLineNumber());
7、字节流(FileInputStream,FileOutputStream,BufferedInputStream,BufferedOutputStream)
InputStream(读) OutputStream(写) ---》对计算机而言
需求:想要操作图片数据。这时就要用到字节流
available();获取文件中长度,可以用来定义数组长度
复制一个图片
1)用字节读取流对象和图片关联
2)用字节写入流对象创建一个图片文件。用于存储获取到的图片数据
3)通过循环读写,完成数据的存储。
4)关闭资源
8、InputStreamReader
字节流通向字符流的桥梁
例
InputStream in=System.in;
//将字节流转成字符流
InputStreamReader isr=new InputStreamReader(in);
//为了提高效率,将字符串进行缓冲区技术高效操作
BufferedReader bufr=new BufferedReader(isr);
String line=null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
System.out.println(line.toUpperCase());
}
bufr.close();
9、OutputStreamWriter
字符流通向字节流的桥梁
例
/*
* 1.
* 源:键盘录入 System.in
* 目的:控制台 System.out
*
* 2.键盘输入到文件上
* 源:键盘录入 System.in
* 目的:文件 new FileOutputStream("E:\\java_heima\\out.txt")
*
* 3.把文件打印到控制台上
* 源:new FileInputStream("E:\\java_heima\\out.txt")
* 目的: System.out
*
*
*/
BufferedReader bufr=
new BufferedReader(new InputStreamReader(System.in));//源
BufferedWriter bufw=
new BufferedWriter(new OutputStreamWriter(new FileOutputStream
("E:\\java_heima\\out.txt")));//目的
String line=null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
bufw.close();
10、流操作的基本规律:
困难:流对象过多,不知道该用哪一个。
解决:
1)明确源和目的
源:输入流:InputStream Reader
目的:输出流OutputStream Writer
2)操作的数据是否是纯文本
是:字符流
否:字节流
3)当体系明确后,在明确要使用哪个具体的对象
通过设备来进行区分
源设备:内存、硬盘、键盘
目的设备:内存、硬盘、控制台
例1:
需求:讲一个文本文件中数据存储到另一个文件中。即复制=文件
源: 1)因为是源,所以使用读取流:
InputStream Reader
2)是不是操作文本文件?
是!可以选择用Reader (这样体系就明确了)
3)接下来明确要使用该体系中的哪个对象。
明确设备:硬盘上一个文件
Reader体系中可以操作文件的对象是 FileReader
是否需要提高效率
是!。加入Reader体系中缓冲区 BufferedReader
FileReader fr = new FileReader("a.txt")
BufferedReader bufr=new BufferedReader(fr)
目的: 1)OutputStream Writer
2)是不是操作文本文件?
是!可以选择用 Writer
3)接下来明确要使用该体系中的哪个对象。
明确设备:硬盘 一个文件
Writer体系中可以操作文件的对象是 FileWriter
是否需要提高效率
是!。加入Reader体系中缓冲区 BufferedWriter
FileWriter fw = new FileWriter("b.txt")
BufferedWriter bufw=new BufferedWriter(fw);
-----------------------------------------------
例2:
需求:将键盘录入的数据保存到一个文本中
源: 1)InputStream Reader
2)是!可以选择用Reader
3)明确设备:键盘,对于对象是System.in
因为Reader字符流,System.in字节流
所以使用转换流:InputStreamReader
InputStreamReader isr=new InputStreamReader(System.in)
是否需要提高效率
是!。加入Reader体系中缓冲区 BufferedReader
BufferedReader bufr=new BufferedReader(isr)
目的 1)OutputStream Writer
2)是!可以选择用 Writer
3)明确设备:硬盘 一个文件
Writer体系中可以操作文件的对象是 FileWriter
FileWriter fw = new FileWriter("b.txt")
是否需要提高效率
是!。加入Reader体系中缓冲区 BufferedWriter
BufferedWriter bufw=new BufferedWriter(fw);
11、扩展一下:想要把录入的数据按照指定的编码表(utf-8),将数据存到文本中
目的: 1)OutputStream Writer
2)是!可以选择用 Writer
3)明确设备:硬盘 一个文件。 使用 FileWriter
但是FileWriter是使用的默认编码表(GBK)
需求: 存储时,按照指定的编码表(utf-8),因此指定的编码表只能转换流可以指定
所以要使用的对象是OutputStreamWriter.
而该转换流对象要接收一个字节输入出流,
而且还可以操作的文件的字节输出流:FileOutputStream
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream
("d.txt"),"UTF-8" )
是否需要提高效率
是!。加入Reader体系中缓冲区 BufferedWriter
BufferedWriter bufw=new BufferedWriter(osw);
所以:记住,转换流什么时候使用
字符与字节之间的桥梁,通常,涉及到字符编码转换时,
需要用到转换流
12、系统信息获取
Properties prop=System.getProperties();
prop.list(new PrintStream("d.txt"));