IO流学习笔记

IO(Input  Output)流
    IO流用来处理设备之间的数据传输
    Java对数据的操作是通过流的方式
    Java用于操作流的对象都在IO包中

    流按操作数据分为两种:字节流与字符流。 
    流按流向分为:输入流,输出流。

IO流常用基类
    ★字节流的抽象基类:
     InputStream ,OutputStream。
    ★字符流的抽象基类:
     Reader , Writer。
   注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
   如:InputStream的子类FileInputStream。
   如:Reader的子类FileReader。

输入字节流InputStream
   InputStream的作用是标志那些从不同输入源产生的类。InputStream是所有输入字节流的抽象父类,因此不能够直接构造InputStream的实例,必须通过它的子类来进行构造。由于它是抽象类,因此提供了一些抽象接口和固有的函数实现。
abstract int read();     //从输入流中读取数据的下一个字节
int read(byte[] b);      //从输入流中读取字节数组,并将其存储在缓冲区数组b中
int read(byte[] b,int off,intlen);//将输入流中最多len个数据字节读入byte数组
int available();        //返回此输入流可以读取(或跳过)的估计字节数
long skip(long n);      //跳过和丢弃此输入流中数据的n个字节
void close();          //关闭此输入流并释放与该流关联的所有的系统资源


根据输入源的不同,共分为如下几种类型
   ★ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用。
   ★FileInputStream:把一个文件作为InputStream,实现对文件的读取操作。
   ★ObjectInputStream:把一个对象作为InputStream,实现对文件的读取操作。
   ★StringBufferInputStream:把一个String对象作为InputStream
并且它还有三个特殊的实现。
   ★PipeInputStream:实现了管道(Pipe)的概念,主要在线程中使用。
   ★SequenceInputstream:把多个Inputstream合并为一个InputStream。
   ★FilterInputStream:对输入流进行各种过滤操作
FilterInputStream还有一组过滤器的具体实现
   ★BufferedInputstream:缓存过滤器
   ★DataInputstream:数据过滤器
   ★LineNumberInputStream:行号过滤器

输出字节流OutputStream
   OutputStream的作用就是输出字节,并将这些字节发送到某个接收器。OutputStream表示字节流的所有类的抽象父类,因此不能够直接构造OutputStream的实例,必须通过它的子类来进行构造。由于它是抽象类,因此提供了一些抽象接口和固有的函数实现。
abstract int write(int b);    //将指定的字节写入此输出流
void write(byte[] b);     //将b.length个字节从指定的byte数组写入此输出流
void write(byte[] b,int off,intlen);//将数组中从off开始的len个字节写入此输出流
void flush();          //刷新此输出流并强制写出所有的缓存的输出字节
void close();          //关闭此输入流并释放与该流关联的所有的系统资源


根据输出源的不同,共分为如下几种类型
   ★ByteArray OutputStream:把信息存入内存中的一个缓冲区中。
   ★File OutputStream:把信息存入文件中。
   ★Object OutputStream:把一个对象作为 OutputStream,实现对对象的写入操作。
并且它还有三个特殊的实现。
   ★Pipe OutputStream:实现了管道(Pipe)的概念,主要在线程中使用。
   ★Filter OutputStream:对输入流进行各种过滤操作
FilterInputStream还有一组过滤器的具体实现
   ★Buffered Outputstream:缓存过滤器
   ★Data Outputstream:数据过滤器
   ★PrintStream:格式化过滤器
看一下复制一个图片的代码
import java.io.*;

class CopyPic {
    public static void main(String[] args) {
        FileOutputStream fos = null;
        FileInputStream fis = null;
        try {
            fos = new FileOutputStream("c:\\2.bmp");
            fis = new FileInputStream("c:\\1.bmp");

            byte[] buf = new byte[1024];// 定义一个数组

            int len = 0;

            while ((len = fis.read(buf)) != -1)// 将读取的字节存入到数组中
            {
                fos.write(buf, 0, len);
            }
        } catch (IOException e) {
            throw new RuntimeException("复制文件失败");
        } finally {
            try {
                if (fis != null)
                    fis.close();
            } catch (IOException e) {
                throw new RuntimeException("读取关闭失败");
            }
            try {
                if (fos != null)
                    fos.close();
            } catch (IOException e) {
                throw new RuntimeException("写入关闭失败");
            }
        }
    }
}


输入字符流Reader
   Reader是用来输入字符数据,它所提供的方法跟Inputstream基本一样。Reader表示字符流的所有类的抽象父类,因此不能够直接构造Reader的实例,必须通过它的子类来进行构造。由于它是抽象类,因此提供了一些抽象接口和固有的函数实现。
   abstract int read(char[] cbuf,int off,intlen);//将字符读入数组某一部分
    abstract void close();         //关闭该流并释放与之关联的所有资源
    int read();                  //都去单个字符
    int read(char[] cbuf);         //将字符读入数组
    void reset();                //重置该流
    long skip(long n);            //跳过字符

根据输入源的不同,共包括如下几种类型,分别与InputStream额实现类想对应。
★CharArrayReader:与ByteArrayInputStream对应,用于读入内存中的字符数组
★FileReader:与FileInputStream对应,用于读取文件的内容
★StringReader:与StringBufferInputStream对应,用于读取字符串
它还有3个特殊的实现
★PipeReader:与PipeInputStream对应
★BufferedReader:与BufferedInputStream对应。
★FilterReader:与FilterInputStream对应
BufferedReader还有一个行号的实现类
★LineNumberReader:与LineNumberInputStream对应,行号读取类

输出字符流Writer
   Writer的作用就是输出字节,并将这些字符发送到某个接收器。Writer表示字符流的所有类的抽象父类,因此不能够直接构造Writer的实例,必须通过它的子类来进行构造。由于它是抽象类,因此提供了一些抽象接口和固有的函数实现。
abstract int write(char[] cbuf,intoff,int len);     //写入字符数组的某一部分
void write(char[] cbuf);     //写入字符数组
void write(int c);         //写入单个字节
void write(String str)      //写入单个字符串
void (String str,int off,int len)  //写入字符串的某一部分
void flush();          //刷新该流的缓存
void close();          //关闭该流,但要先刷新它


根据输出源的不同,共包括如下几种类型,分别与OutputStream的实现类相对应。
★CharArray Writer:与ByteArray Out putstream对应,用于写入内存中的字符数组
★File Writer:与File Out putstream对应,用于写入文件的内容
★String Writer:无与之对应的以字节为导向的Stream,用于写入内存中的字符串
它还有3个特殊的实现
★Pipe Writer:与Pipe Out putstream对应
★Buffered Writer:与Buffered Out putstream对应。
★Filter Writer:与Filter Out putstream对应
★PrintWriter:格式化过滤器
看一下代码
<div>//将C盘一个文本文件复制到D盘。</div><div></div>import java.io.*;

class CopyText {
    public static void main(String[] args) throws IOException {
        copy_2();
    }

    public static void copy_2() {
        FileWriter fw = null;
        FileReader fr = null;
        try {
            fw = new FileWriter("SystemDemo_copy.txt");
            fr = new FileReader("SystemDemo.java");

            char[] buf = new char[1024];

            int len = 0;
            while ((len = fr.read(buf)) != -1) {
                fw.write(buf, 0, len);
            }
        } catch (IOException e) {
            throw new RuntimeException("读写失败");

        } finally {
            if (fr != null)
                try {
                    fr.close();
                } catch (IOException e) {
                }
            if (fw != null)
                try {
                    fw.close();
                } catch (IOException e) {
                }
        }
    }
  
  
<pre name="code" class="java">//从C盘读一个字符,就往D盘写一个字符。

public static void copy_1() throws IOException {
        // 创建目的地。
        FileWriter fw = new FileWriter("RuntimeDemo_copy.txt");

        // 与已有文件关联。
        FileReader fr = new FileReader("RuntimeDemo.java");

        int ch = 0;

        while ((ch = fr.read()) != -1) {
            fw.write(ch);
        }
        fw.close();
        fr.close();

    }

}
 
 

字节流与字符流的转换
字节流输入流转换为字符输入流
InputStreamReader是字节流通向字符流的桥梁,它使用了指定的charset读取字节并将其解码字符
构造方法摘要
黑马程序员——Java学习笔记《IO流》
有以下方法
黑马程序员——Java学习笔记《IO流》

字节流输出流转换为字符输出流
OutputStreamWriter是字符流通向字节流的桥梁,可使用指定的charset将要写入流中的字符编码成字节。它使用的字符集可以有名称指定或显示给定,否则将接受平台默认的字符集
构造方法摘要
黑马程序员——Java学习笔记《IO流》
有以下方法
黑马程序员——Java学习笔记《IO流》

文件操作类File
  File类用于实现对目录的创建、删除,对文件的创建、重命名、删除。因此,File类操作的对象分为两类:目录和文件。
File有4个构造函数来创建一个文件对象
黑马程序员——Java学习笔记《IO流》
常见的一些方法:
isDirectory();是否是目录
isFile();是否是文件
exists() 文件是否存在
mkdir();创建一个目录
mkdirs();创建所有目录
creatNewFile();创建一个文件
delete();删除文件或目录


总结:流操作的基本规律,通过三个明确来完成
1.明确源和目的
源:Inputstream   Reader
目的:OutputStream  Writer
2.操作的数据是否是纯文本
是:字符流
不是:字节流
3.当体系明确后,就要明确要使用的是哪个对象,通过设备来区分
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值