课程7.1之IO

作者: GitOPEN | 来源:发表于2015-08-05 14:04 被阅读37次

    转发请注明出处:
    安卓猴的博客(http://sunjiajia.com)


    本节课程将学习以下内容:

    • IO操作的目标
    • IO的分类方法
    • 读取文件和写入文件的方法
    • 大文件的读写方法
    • 字符流的使用方法
    • 处理流的使用实例
    • "装饰者(Decorator)"模式
    • 节点流与处理流的关系

    IO操作的目标

    • 从数据源当中读取数据,以及将数据写入到数据的目的地当中。

    特点:

    • I/O系统的主要目标是为了对数据进行读写操作;
    • 数据的流向以Java程序为参照物;
    • I/O流可以有三种分类方法;
    • 有read和write两个主要方法。

    IO的分类方法

    第一种:

    输入流;输出流。

    第二种:

    字节流;字符流。

    第三种:

    节点流;处理流。

    特点:

    • BufferedReader:字符输入处理流;readline()方法,每次读取一行,返回一个字符串;
    • BufferedReader br = new BufferedReader(new FileReader("xxx.txt"));

    读取文件和写入文件的方法

    核心类

    • InputStream和FileInputStream(从硬盘中文件读取数据)
    • OutputStream和FileOutputStream(把数据写入硬盘中文件)

    例子1:(请动手)

    1.新建txt文件分别名为from.txt和to.txt;在from.txt中写上字符串abcd,然后新建一个名为Demo01.java的源文件:

    // 1.导入类;
    import java.io.*;
    
    class Demo01 {
    
        public static void main(String[] args) {
            // 2.声明输入流引用、生成输出流的引用
            FileInputStream fis = null;
            FileOutputStream fos = null;
            try {
                // 3.生成代表输入流的对象、生成代表输出流的对象
                fis = new FileInputStream("e:/src/from.txt");
                fos = new FileOutputStream("e:/src/to.txt");
                // 4.生成一个字节数组
                byte[] buffer = new byte[100];
                // 5.调用输入流对象的read方法,读取数据;调用输出流对象的write方法,写入数据;
                int temp = fis.read(buffer, 0, buffer.length);
                fos.write(buffer, 0, temp);
            } catch (Exception e) {
    
            }
    
        }
    }
    
    

    大文件的读写方法

    例子2:(请动手)

    1.新建txt文件分别名为from2.txt和to2.txt;在from2.txt中写上一篇很长(几万字,网上copy)的纯英文文章,然后新建一个名为Demo02.java的源文件:

    
    import java.io.*;
    
    class Demo02 {
    
        public static void main(String[] args) {
    
            FileInputStream fis = null;
            FileOutputStream fos = null;
            try {
    
                fis = new FileInputStream("e:/src/from2.txt");
                fos = new FileOutputStream("e:/src/to2.txt");
    
                byte[] buffer = new byte[1024];
                while (true) {
                    int temp = fis.read(buffer, 0, buffer.length);
                    // temp是-1的时候,说明read函数已经读完
                    // 这时跳出循环
                    if (temp == -1) {
                        break;
                    }
                    fos.write(buffer, 0, temp);
                }
    
            } catch (Exception e) {
                System.out.println(e);
            } finally {
                try {
                    // 一定要执行输入输出流的关闭
                    fis.close();
                    fos.close();
                } catch (Exception e) {
                    System.out.println(e);
                }
    
            }
        }
    }
    
    

    字符流的使用方法

    • 读写文件时,以字符为基础;
    • 字节输入流(常用FileReader)都是Reader的子类;
    • 字节输出流(常用FileWriter)都是Writer的子类。

    例子3:(请动手)

    使用前面的from.txt和to.txt来进行操作。

    
    import java.io.*;
    
    class Demo03 {
    
        public static void main(String[] args) {
            FileReader fr = null;
            FileWriter fw = null;
    
            try {
    
                fr = new FileReader("e:/src/from.txt");
                fw = new FileWriter("e:/src/to.txt");
    
                char[] buffer = new char[100];
                int temp = fr.read(buffer, 0, buffer.length);
    
                fw.write(buffer, 0, temp);
    
    
            } catch (Exception e) {
                    System.out.println(e);
            } finally {
                    try {
                        fr.close();
                        fw.close();
                    } catch (Exception e) {
                            System.out.println(e);
                    }
            }
        }
    }
    
    

    处理流的使用实例

    例子4:BufferedReader的使用

    
    import java.io.*;
    
    class Demo04 {
    
        public static void main(String[] args) {
            FileReader fr = null;
            BufferedReader br = null;
    
            try {
    
                fr = new FileReader("e:/src/from.txt");
                br = new BufferedReader(fr);
    
                String line = null;
                while (true) {
                    line = br.readLine();
                    if (line == null) {
                        break;
                    }
                    System.out.println(line);
                }
    
            } catch (Exception e) {
                    System.out.println(e);
            } finally {
                    try {
                        fr.close();
                        br.close();
                    } catch (Exception e) {
                            System.out.println(e);
                    }
            }
        }
    }
    
    

    "装饰者(Decorator)"模式

    例子5:

    1.定义一个Worker接口

    interface Worker {
        public void doSomeWork();
    }
    
    

    2.定义一个A公司的类AWorker,文件名为AWorker.java:

    
    class AWorker implements Worker {
        private Worker worker;
        public AWorker (Worker worker) {
            this.worker = worker;
        }
    
        public void doSomeWork() {
            System.out.println("你好。我是A公司");
            worker.doSomeWork();
        }
    
    }
    
    

    3.新建两个文件名为Plumber.java和Carpenter.java的源文件:

    class Plumber implements Worker {
        public void doSomeWork() {
            System.out.println("修水管");
        }
    }
    
    class Carpenter implements Worker {
        public void doSomeWork() {
            System.out.println("修门窗");
        }
    }
    

    4.新建一个名为Demo05.java的Java源文件:

    
    class Demo05 {
        public static void main(String[] args) {
            // 生成一个A公司水管工对象
            Plumber plumber = new Plumber();
            AWorker aWorker1 = new AWorker(plumber);
            aWorker1.doSomeWork();
    
            Carpenter carpenter = new Carpenter();
            AWorker aWorker2 = new AWorker(carpenter);
            aWorker2.doSomeWork();
    
        }
    }
    
    
    

    节点流与处理流的关系

    • 处理流就是用来处理节点流的,增加节点流的功能。

    相关文章

      网友评论

      本文标题:课程7.1之IO

      本文链接:https://www.haomeiwen.com/subject/txavqttx.html