您的位置:首页 > 编程语言 > Java开发

IO流学习笔记

2015-11-13 13:59 351 查看
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();          //关闭此输入流并释放与该流关联的所有的系统资源

根据输出源的不同,共分为如下几种类型   ★ByteArrayOutputStream:把信息存入内存中的一个缓冲区中。   ★FileOutputStream:把信息存入文件中。   ★ObjectOutputStream:把一个对象作为OutputStream,实现对对象的写入操作。并且它还有三个特殊的实现。   ★PipeOutputStream:实现了管道(Pipe)的概念,主要在线程中使用。   ★FilterOutputStream:对输入流进行各种过滤操作FilterInputStream还有一组过滤器的具体实现   ★BufferedOutputstream:缓存过滤器   ★DataOutputstream:数据过滤器   ★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);         //将字符读入数组<
4000
div>    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的实现类相对应。★CharArrayWriter:与ByteArrayOutputstream对应,用于写入内存中的字符数组★FileWriter:与FileOutputstream对应,用于写入文件的内容★StringWriter:无与之对应的以字节为导向的Stream,用于写入内存中的字符串它还有3个特殊的实现★PipeWriter:与PipeOutputstream对应★BufferedWriter:与BufferedOutputstream对应。★FilterWriter:与FilterOutputstream对应★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读取字节并将其解码字符构造方法摘要


有以下方法



字节流输出流转换为字符输出流OutputStreamWriter是字符流通向字节流的桥梁,可使用指定的charset将要写入流中的字符编码成字节。它使用的字符集可以有名称指定或显示给定,否则将接受平台默认的字符集构造方法摘要


有以下方法



文件操作类File
  File类用于实现对目录的创建、删除,对文件的创建、重命名、删除。因此,File类操作的对象分为两类:目录和文件。File有4个构造函数来创建一个文件对象


常见的一些方法:isDirectory();是否是目录isFile();是否是文件exists() 文件是否存在mkdir();创建一个目录mkdirs();创建所有目录creatNewFile();创建一个文件delete();删除文件或目录

总结:流操作的基本规律,通过三个明确来完成1.明确源和目的源:Inputstream   Reader目的:OutputStream  Writer2.操作的数据是否是纯文本是:字符流不是:字节流3.当体系明确后,就要明确要使用的是哪个对象,通过设备来区分源设备:内存,硬盘,键盘目的设备:内存,硬盘,控制台
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息