黑马程序员-JAVA基础之IO流(2)
来源:互联网 发布:淘宝网费列罗巧克力 编辑:程序博客网 时间:2024/06/18 18:54
————– android培训、java培训、java学习型技术博客、期待与您交流! ———–
字符流的缓冲区
字符流和字节流都有缓冲区,缓冲区的出现提高了对数据的读写效率
字符流的缓冲区对应类:
BUfferWriter
BufferedReader
特点:缓冲区要结合流才可以使用,在创建缓冲区之前,必须要有流对象。在流的基础上对流的功能进行了增强。
BUfferWriter步骤:
1.创建一个字符写入流对象
FileWriter fw=new FileWriter(“a.txt”);
2.将需要被提高效率的流对象作为参数传递给缓冲区的构造函数
bufferedWriter bufw=new BufferedWriter(fw);
buff.write(“asdasdas”);
bufw.newLine();//换行符,跨平台的
3.将缓冲区刷新
bufw.flush;
4.关闭缓冲区,就是在关闭缓冲区中的流对象
bufw.close();
BufferedReader步骤
1.创建一个字符写入流对象
FileReader fr=new FileReader (“a.txt”);
2.将需要被提高效率的流对象作为参数传递给缓冲区的构造函数
BufferedReader bufr=new BufferedReader (fr);
3.读取流对象:该缓冲区提供了一个一次读取一行的方法。当返回null时表示,文件读到末尾
String line=null;
while((line=bufr.readLine())!=null)
{
String s=line;}
4.关闭
bufr.close();
readLine()方法的原理:
无论是读一行,获取多个字符,最终都是在硬盘上一个一个读取,最终使用额还是read方法一次读一个的方法。
字节流的缓冲区跟字符流类似
下面通过一段程序来演示一下
/*演示mp3的复制。通过缓冲区。BufferedOutputStreamBufferedInputStream*/import java.io.*;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("c:\\0.mp3")); BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("c:\\1.mp3")); int by = 0; while((by=bufis.read())!=-1) { bufos.write(by); } bufos.close(); bufis.close(); }}
转换流
读取键盘录入
读取键盘录入时,需要每次读取一行,readLine方法是字符流BufferedReader类中的方法方法,而键盘录入的read方法是字节流InputStream的方法,此时就需要转换流:
InputStreamReader
如果不定义结束标记,键盘录入就结束不了。
将键盘录入的数据打印在控制台并转换为大写,将over作为结束标记:
//获取键盘录入对象。 //InputStream in = System.in; //将字节流对象转成字符流对象,使用转换流。InputStreamReader //InputStreamReader isr = new InputStreamReader(in); //为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader //BufferedReader bufr = new BufferedReader(isr); //键盘的最常见写法。 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out)); String line = null; while((line=bufr.readLine())!=null) { if("over".equals(line)) break; bufw.write(line.toUpperCase()); bufw.newLine(); bufw.flush(); } bufr.close();
流对象操作规律
通过键盘录入的例子分析出流操作的大致规律:
1,需求:将键盘录入打印在控制台上
源:键盘录入。
目的:控制台。
2,需求:想把键盘录入的数据存储到一个文件中。
源:键盘。
目的:文件。
3,需求:想要将一个文件的数据打印在控制台上。
源:文件。
目的:控制台。
因为流对象很多,为了便于选取合适的流对象进行操作,分析出流操作的基本规律:
通过三个明确来完成。
1,明确源和目的。
源:输入流。InputStream? Reader
目的:输出流。OutputStream? Writer。
2,操作的数据是否是纯文本。
是:字符流。
不是:字节流。
3,当体系明确后,在明确要使用哪个具体的对象。
通过设备来进行区分:
源设备:内存,硬盘。键盘
目的设备:内存,硬盘,控制台。
改变标准输入输出设备
System.setIn(new FileInputStream(“D:\1.txt”));//改变标准输出设备,读取
System.setOut(new FileOutputStream(“D:\2.txt”));//改变标准输入设备,写入
如果把标准输入输出设备都改成文件,就相当于复制文件。
改变输出设备还有一个应用,就是记录系统信息,Properties与流相结合。
Properties p = System.getProperties();
打印系统信息可以通过遍历p.keySet()集合来获取,也可以通过p.list(PrintStream p)方法改变输入设备,将系统信息写入日志文件存入硬盘中。
Properties:
Properties是HashTable的子类,具有Map集合的特点,存储的是键值对。是集合中和IO相结合的容器。
Properties对象可以用作存储键值对形式的配置文件。
Properties prop = new Properties();
设置和获取元素:prop.setProperty(“abc”,”10”);prop.getProperty(“abc”);
打印流:
打印流能将各种类型的数据原样打印。
PrintWriter,将键盘录入数据转换为大写打印在控制台上
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); PrintWriter out = new PrintWriter(new FileWriter("a.txt"),true); String line = null; while((line=bufr.readLine())!=null) { if("over".equals(line)) break; out.println(line.toUpperCase()); //out.flush(); } out.close(); bufr.close();
合并流
SequenceInputStream:可以将多个流对象合并成一个流对象。
将1.txt、2.txt、3.txt这三个文件中的内容复制到4.txt这一个文件中:
Vector<FileInputStream> v = new Vector<FileInputStream>(); v.add(new FileInputStream("c:\\1.txt")); v.add(new FileInputStream("c:\\2.txt")); v.add(new FileInputStream("c:\\3.txt")); Enumeration<FileInputStream> en = v.elements();//SequenceInputStream接受的枚举对象,集合中只有Vector有这个方法获取枚举对象 SequenceInputStream sis = new SequenceInputStream(en);//将枚举对象作为参数传递给SequenceInputStream FileOutputStream fos = new FileOutputStream("c:\\4.txt"); byte[] buf = new byte[1024]; int len =0; while((len=sis.read(buf))!=-1) { fos.write(buf,0,len); } fos.close(); sis.close();
————– android培训、java培训、java学习型技术博客、期待与您交流! ———–
- 黑马程序员--JAVA基础之IO流
- 黑马程序员----Java基础之IO流
- 黑马程序员--JAVA基础之IO流
- 黑马程序员 Java基础之IO流
- 黑马程序员--Java基础之IO流(2)
- 黑马程序员-JAVA基础之IO流(2)
- 黑马程序员 Java基础----IO流(2)
- 黑马程序员-----Java基础-----IO流-2
- 黑马程序员----Java基础基础之IO流
- 黑马程序员-----java基础十八(java之IO流)
- <<黑马程序员>>java基础之IO
- 黑马程序员--Java基础之IO
- 黑马程序员--java基础复习之IO
- 黑马程序员 Java基础之IO流字节流
- 黑马程序员java 基础之io流中的字符流
- 黑马程序员java基础之IO流中的字节流
- 黑马程序员java基础之io流中的其他流
- 【黑马程序员】----Java 基础之 IO流__字符流
- 对插入排序以及内存管理的一些分析
- 解题报告 之 HDU5305 Friends
- 正则表达式笔记(第二弹:JAVA中正则表达式的应用)
- MFC编译问题c1083
- 对象与继承
- 黑马程序员-JAVA基础之IO流(2)
- 如何抓取BT天堂电影数据
- 在cocos2d引擎中安卓开发引用第三方库(如Opencv)
- Python脚本利用openoffice将office文档转为html或者pdf。
- [HDU 4324]Triangle LOVE[找环]
- 4)Win10-UWA开发 创建第一个应用 “Hello, world” (XAML/C#)
- maven error: unmappable character for encoding ASCII
- Polymer 1.0 升级指南
- HTML中块级元素和行内元素