IO流

作者: 风_3aa7 | 来源:发表于2019-10-24 22:48 被阅读0次

    1、IO流

    1.1、IO概述

    • 列IO流用来处理设备之间的数据传输
    • 列Java对数据的操作是通过流的方式
    • 列Java用于操作流的对象都在IO包中
    • 列流按操作对象分为两种:字节流与字符流,字节流可以操作任何数据,字符流只能操作纯字符数据比较方便。
    • 列流按流向分为:输入流,输出流。

    1.2、IO流结构图

    image.png

    1.3、字节流

    image.png
    以上我常用的就是FileInputStream以及FileOutputStream。我比较喜欢直接上干货,所以直接用代码通过几个例子来讲解字节流的实现过程。
    package com.io;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.OutputStream;
    /**
     * 从程序把数据写出到磁盘
     * @author Administrator
     *
     */
    public class Demo1 {
        public static void main(String[] args) {
            try {
                //1.使用File类找到一个文件对象,得到IO操作的源或目标
                File file = new File("F:/test.txt");
                //2.通过字节流或字符流的子类创建对象,(得到IO操作的通道)
                //OutputStream os = new FileOutputStream(file);
                OutputStream os = new FileOutputStream(file, true);
                //3.进行读或写的操作,(IO操作)
                byte[] b = "hello word!".getBytes();
                os.write(b);
                //os.write("hello word!".getBytes());
                //4.关闭输入/输出,(打完收工,注意节约资源,关掉)
                os.close();
                System.out.println("操作完成!");
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("文件找不到!");
            }
        }
    }
    
    package com.io;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    /**
     * 从磁盘把数据文件读出到程序
     * @author Administrator
     *
     */
    public class Demo2 {
        public static void main(String[] args) {
            try {
                //1.使用File类找到一个文件对象,得到IO操作的源或目标
                File file = new File("F:\\test.txt");
                //2.通过字节流或字符流的子类创建对象,(得到IO操作的通道)
                InputStream is = new FileInputStream(file);
                //3.进行读或写的操作,(IO操作)
                byte[] b = new byte[512];
                while(is.read(b) != -1){
                    String str = new String(b);
                    System.out.println(str);
                }
                //4.关闭输入/输出,(打完收工,注意节约资源,关掉)
                is.close();
                System.out.println("操作完成!");
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("文件找不到!");
            }
        }
    }
    

    1.4字符流

    image.png
    我常用的是FileReader以及WriterReader。上干货
    package com.io;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.Writer;
    /**
     * 通过字符流把数据写到磁盘文件
     * @author Administrator
     *
     */
    public class Demo3 {
        public static void main(String[] args) {
            try {
                //1.使用File类找到一个文件对象,得到IO操作的源或目标
                File file = new File("F:/test.txt");
                //2.通过字节流或字符流的子类创建对象,(得到IO操作的通道)
                Writer writer = new FileWriter(file);
                //3.进行读或写的操作,(IO操作)
                writer.write("你好,张文!");
                //4.关闭输入/输出,(打完收工,注意节约资源,关掉)
                writer.close();
                System.out.println("操作完成!");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    package com.io;
    import java.io.File;
    import java.io.FileReader;
    import java.io.Reader;
    /**
     * 通过字符流把文件内容读到程序中
     * @author Administrator
     *
     */
    public class Demo4 {
        public static void main(String[] args) {
            try {
                //1.使用File类找到一个文件对象,得到IO操作的源或目标
                File file = new File("F:/test.txt");
                //2.通过字节流或字符流的子类创建对象,(得到IO操作的通道)
                Reader reader = new FileReader(file);
                //3.进行读或写的操作,(IO操作)
                char[] b = new char[512];
                int num = 0;
                while((num = reader.read(b)) != -1){
                    String str = new String(b, 0, num);
                    System.out.println(str);
                }
                //4.关闭输入/输出,(打完收工,注意节约资源,关掉)
                reader.close();
                System.out.println("操作完成!");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    接下来写一个copy的程序,把某个文件复制到另外的地方:

    package com.io;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    /**
     * 复制文件到某个目录
     * @author Administrator
     *
     */
    public class Demo5 {
        public static void main(String[] args) {
            File f1 = new File("D:\\IMG_9214s.jpg");
            File f2 = new File("E:\\zhangwen.jpg");
            copy(f1, f2);
        }
        
        /**
         * 
         * @param f1源文件
         * @param f2复制文件
         */
        public static void copy(File f1, File f2){
            try {
                //1、分别创建输入流和输出流,通过字节流或字符流的子类创建对象,(得到IO操作的通道)
                InputStream is = new FileInputStream(f1);
                OutputStream os = new FileOutputStream(f2);
                //2、读写操作(边读边写)先读再写
                byte[] b = new byte[512];
                //先读取
                int num = is.read(b);
                while(num != -1){
                    //开始写
                    os.write(b);
                    num = is.read(b);
                }
                //3.关闭输入/输出,(打完收工,注意节约资源,关掉)
                is.close();
                os.close();
                System.out.println("操作成功!");
            } catch (Exception e) {
                System.out.println("文件找不到!");
            }
        }
    }
    

    1.5缓冲流

    IO的缓冲区的存在就是为了提高效率,把要操作的数据放进缓冲区,然后一次性把缓冲区的内容写到目的地,而不是写一次就往目的地写一次。

    package com.io;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    /**
     * 字符输入缓冲流
     * @author Administrator
     *
     */
    public class Demo6 {
        public static void main(String[] args) throws IOException {
            //1、创建文件对象
            File file = new File("H:/软考真题/20170323_IO流/20170323_IO流/笔记/IO和XML.txt");
            //2、创建流对象
            BufferedReader bf = new BufferedReader(new FileReader(file));
            //3、读操作
            String str = null;
            while((str = bf.readLine()) != null){
                System.out.println(str);
            }
            //4、关闭流释放资源
            bf.close();
        }
    }
    
    package com.io;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    /**
     * 字符输出缓冲流
     * @author Administrator
     *
     */
    public class Demo7 {
        public static void main(String[] args) throws IOException {
            //1、创建文件对象
            File file = new File("H:/test.txt");
            //2、创建流对象
            BufferedWriter bw = new BufferedWriter(new FileWriter(file));
            //3、输出操作
            bw.write("你好JAVA!");
            //4、关闭流
            bw.close();
        }
    }
    

    1.6转换流

    打印流:该流提供了打印方法,可以将各种数据类型的数据都原样打印。

    package com.io;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    /**
     * 转换输出流
     * @author Administrator
     *
     */
    public class Demo8 {
        public static void main(String[] args) throws IOException {
            //1、创建文件对象
            File file = new File("H:/test.txt");
            //2、创建转换流,字节流转换为字符流
            Writer writer = new OutputStreamWriter(new FileOutputStream(file));
            //3、输出操作
            writer.write("转换输出流!");
            //4、关闭流
            writer.close();
        }
    }
    

    1.7打印流

    打印流:该流提供了打印方法,可以将各种数据类型的数据都原样打印。

    package com.io;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.PrintWriter;
    /**
     * 字符打印输出流
     * @author Administrator
     *
     */
    public class Demo9 {
        public static void main(String[] args) throws FileNotFoundException {
            //1、创建文件对象
            File file = new File("H:/test.txt");
            //2、创建打印流
            PrintWriter printWriter = new PrintWriter(file);
            //3、输出操作
            printWriter.write("你好打印流!");
            //4、关闭流
            printWriter.close();
            printWriter.flush();
        }
    }
    

    相关文章

      网友评论

          本文标题:IO流

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