黑马程序员——java IO流
来源:互联网 发布:看图猜成语软件 编辑:程序博客网 时间:2024/04/30 04:13
//=====================================================================
//@TITLE:
// java IO流
//@AUTHOR:
// Benwolf
//@DATE:
// Tuesday 26-April-2013
//=====================================================================
一、java中为什么要有IO流,它是用来做什么的?
IO流:主要用来操作设备上的数据。比如用java程序复制文件、用程序将数据录入到文件中都用到了IO流。
二、IO流具体的分类
1.按操作数据来分:
<1>字符流:
字符流的由来:
因为文件的编码不同,从而有了对字符进行高效操作的字符流对象。
原理:其实就是基于字节流读取字节时,去查了指定的编码表:也就是:字符流 = 字节流 +编码表
<2>字节流:
字节流在读取的时候,读到一个字节返回一个字节。它可以操作任何类型的数据。比如“mp3文件、音频文件、视频文件、文本文件。”
2.按流向分:
<1>输入流:
<2>输出流:
3.字符流与字节流的区别:
<1>字节流只能读取一个字节,而字符流可以读取一个字符或多个字符。
<2>字节流可以操作任何文件,字符流只能操作文本文件。
三、IO的体系:
IO所具备最基本的功能就是"读和写"。
1.字符流
Reader<读> Writer<写>
2.字节流
InputStream<读> OutPutStream<写>
注意:在操作IO流数据的时候,分清2个明确就可以。
A: 明确操作数据源和目的地体系
1、明确数据源
从数据源是读取数据
InPutStream
Reader
2、明确目的地
把数据写入目的地
OutPutStream
Writer
B: 明确具体的数据源和目的地是否是文本文件
1、明确数据源
是文件: 用Reader
不是文件: InputStream
2、明确目的地
写入的目的地是否是文件,如果是: 用Wrtier
如果不是文件: 用OutPutStream
四:IO流的使用步骤:
1.先明确数据源和目的地
2.封装数据源和目的地
3.调用流对象的方法
4.释放资源。
五:在操作IO流遇到的一些问题:
1.什么时候需要用到转换流?
在操作字节流数据的时候,为了使用高效字符流的一些方法需要把字节流进行转换,这个时候java就提供了转换流。
(InputStreamReader:字节流转换成字符流
OutPutStreamWriter:字符流转换成字节流)
2.在创建字符输出流对象做了几件事?
三件事:1.创建文件对象 2.创建输出流对 3.输出流指向文件对象。
3.为什么一定要释放资源?
1.让对象变成垃圾 2.通知操作系统释放被占用的资源。
4.flush方法和close方法的区别?
flush方法:刷新缓冲区后,还可以继续使用流对象
close方法:是在关闭流之前先进行的刷新动作,关闭流后,对象不能使用,变成垃圾了。
六:IO流的一些实例:
字符流实例1:
- /*
- * 把d盘目录下的a.txt复制到e盘下的b.txt中,并加入异常处理。
- */
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
- public class CopyTest {
- public static void main(String[] args) {
- FileReader fr = null;
- FileWriter fw = null;
- try {
- // 字符输入流封装数据源
- fr = new FileReader("d:\\a.txt");
- // 字符输出流封装目的地
- fw = new FileWriter("e:\\b.txt");
- // 基本读写
- int ch = 0;
- while ((ch = fr.read()) != -1) {
- fw.write(ch);
- // fw.flush();
- }
- } catch (IOException ie) {
- ie.printStackTrace();
- } finally {
- // 释放资源
- if (fw != null) {
- try {
- fw.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (fr != null) {
- try {
- fr.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
字节流实例2:
- /**
- *测试字节流的复制mp3所用的时间:
- *
- */
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- public class CopyMP3 {
- public static void main(String[] args) throws IOException {
- long start = System.currentTimeMillis();
- method();
- long end = System.currentTimeMillis();
- System.out.println("共耗时:" + (end - start) + "毫秒");
- }
- // 高效的一次读写一个字节
- private static void method() throws IOException {
- //创建字节输入流对象
- BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
- "zxmzf.mp3"));
- //创建字节输出流对象
- BufferedOutputStream bos = new BufferedOutputStream(
- new FileOutputStream("method4.mp3"));
- //定义缓冲区
- byte[] bys = new byte[1024];
- int len = 0;
- //调用输入流方法
- while((len=bis.read(bys))!=-1){
- bos.write(bys,0,len);
- }
- //释放资源
- bos.close();
- bis.close();
- }
- }
转换流实例3:
- /**
- *把键盘录入的数据,转成大写通过标准流显示在控制台。
- *
- */
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- public class SystemOutDemo2 {
- public static void main(String[] args) throws IOException {
- // 封装数据源和目的地
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
- //基本读写操作
- String line= null;
- while((line=br.readLine())!=null){
- //数据源是键盘录入的时候,一定要自定义结束标记
- if("886".equals(line)){ //==
- break;
- }
- bw.write(line.toUpperCase());
- bw.newLine();
- bw.flush();
- }
- //释放资源
- bw.close();
- br.close();
- }
- }
上述总结:
实例1:当数据源和目的地的操作的数据是文本文件的时候,用字符流是最高效。
实例2:高效字节流,之所以高效是因为每次读取字节的时候,都将数据存在了缓冲区。在写入的时候从缓冲区写入,提高了效率
实例3:当从键盘录入和控制台结束的时候,需要定义标记。因为控制台录入的都是字节和字符,所以需要用到了转换流,转换成字符流,并使用它的高效方法。
- 黑马程序员——java IO流
- 黑马程序员—java—IO流
- 黑马程序员——Java IO流
- 黑马程序员——Java IO流
- 黑马程序员——java-IO流
- 黑马程序员java学习—IO流
- 黑马程序员—Java中的IO流
- 黑马程序员—io流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员 — IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员——Java IO概述
- 黑马程序员——Java IO
- include
- tcpdump抓包分析详解
- struts 过滤器验证用户是否已经登陆
- 2012年02月24日 工作总结
- SendMessage发送字符串参数
- 黑马程序员——java IO流
- AS3类String字符串截取方法比较
- 2012年云计算系统架构师大会演讲 微软云创新
- JNA移植到android上
- 容器与容器适配器
- 使用zookeeper实现集群和负载均衡
- 每日编程5之逆序输出单链表
- sqlserver 评估期已过
- S3C2410 && WinCE6.0的中断处理分析