zoukankan      html  css  js  c++  java
  • IO流

    1.flush():强行把缓冲区的数据放入到输出流中

       close():关闭输出流,之后再使用输出流对象会报错(stream  closed异常)

    2.输入流——对应的——》输出流

      01.字节输入流的基类InputStream ————》字节输出流的基类OutputStream

      02.子类FileInputStream(按字节进行读取数据,中文会出现乱码)————》子类FileOutputStream 

      03.字符输入流Reader————》字符输出流Writer

      04.子类InputStreamReader(FileReader)————》子类OutputStreamWriter(FileWriter)

      05.子类BufferedReader(效率高,有默认的缓冲区可以逐行读取)————》子类BufferedWriter

      06.二进制文件的读取DataInputStream(输入流)————》DataOutputStream(输出流)

    3.输入输出流都是相对于计算机的内存而言的。

      01.所有的输入流都有的方法

      02.所有的输出流都有的方法

    4.编码格式

      01.utf-8:中文字符以及中文都是占3个字节,数字和字母都是占1个

      02.gbk:中文字符以及中文都是占2个字符

    5.只能创建一层目录

    @Test
        public void test01() {
            File file = new File("f:/hello");
            file.mkdir();
        }
    mkdir

    6.同时创建多层目录

    @Test
        public void test02() {
            File file = new File("f:/hello/hello");
            file.mkdirs();
        }
    mkdirs

    7.创建或删除文件以及一些常用的方法

    @Test
        public void test03() throws IOException {
            File file = new File("f:/IO");
            // 首先判断文件是否存在
            if (!file.exists()) {
                // 创建文件成功
                if (file.createNewFile()) {
                    System.out.println("文件创建成功");
                    System.out.println("创建的是否是文件" + file.isFile());
                    System.out.println("文件的名称" + file.getName());
                    System.out.println("文件的大小" + file.length());
                    System.out.println("文件的绝对路径" + file.getAbsolutePath());
                }
            } else {
                // 文件已经存在,选择删除文件
                if (file.delete()) {
                    System.out.println("文件删除成功");
                }
            }
        }
    常用操作

    8.使用FileInputStream读取文件的内容

    @Test
        public void test04() {
            InputStream is = null;
            int num = 0;
            try {
                is = new FileInputStream("f:/hello.txt");
                System.out.println("显示可读取的字节数:" + is.available());
                while ((num = is.read()) != -1) {
                    System.out.print((char) num);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    FileInputStream

    9.使用OutputStream写入文件内容

    /**
         * 注意:
         *     01.Java项目的编码格式要和输出文件的编码一致,都是UTF-8
         *     02.如果系统中没有指定的文件,会默认创建 
         *     03.如果重复输出,则上次输出的内容会被覆盖;如果不想覆盖,就使用重载在第二个参数的位置输入true
         */
        @Test
        public void test05() {
            OutputStream os = null;
            try {
                os = new FileOutputStream("f:/hello.txt", true);
                os.write("你好,IO流".getBytes());
                os.write("IO流操作".getBytes());
                os.flush();// 强行把缓存区的数据写到输出流中
                os.write("测试flush()".getBytes());
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
        }
    FileOutputStream

    10.使用FileReader读取文件内容

    @Test
        public void test06() {
            // 获取当前的编码格式
            System.out.println("当前使用的编码格式:" + System.getProperty("file.encoding"));
            Reader reader = null;
            try {
                // 创建输入流Reader
                reader = new FileReader("f:/hello.txt");
                char[] words = new char[1024];
                int num = 0;
                // 字符串的拼接
                StringBuffer buffer = new StringBuffer();
                while ((num = reader.read(words)) != -1) {
                    buffer.append(words);
                }
                System.out.println("输出获取的字符串");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
        }
    FileReader

    11.使用BufferedReader读取文件内容

    /**
         *创建输入流Reader BufferedReader 和FileReader联合使用效率高
         * 底层有默认的缓冲区,可以逐行读取
         */
        @Test
        public void test07() {
            // 创建BufferedReader对象,传递Reader的对象
            BufferedReader bufferedReader = null;
            Reader reader = null;
            try {
                reader = new FileReader("f:/hello.txt");
                bufferedReader = new BufferedReader(reader);
                String line = null;// 设置变量用于接收读取的内容
                while ((line = bufferedReader.readLine()) != null) {
                    System.out.println(line);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    bufferedReader.close();
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
        }
    BufferedReader

    12.使用OutputStreamWriter

    /**
         *  写入文件(字符流) 输出流 没有文件会自动创建新的文件,会默认覆盖之前的内容
         * @throws IOException
         */
        @Test
        public void test08() throws IOException {
            OutputStream stream = new FileOutputStream("f:/hello.txt", true);
            Writer writer = new OutputStreamWriter(stream);
            writer.write("OutputStreamWriter的练习");
            writer.close();
        }
    OutputStreamWriter

    13. 使用FileWriter写入文件

    @Test
        public void test09() throws IOException {
            Writer writer = new FileWriter("f:/hello.txt", true);
            writer.write("FileWriter的练习");
            writer.close();
        }
    FileWriter

    14.使用BufferedWriter写入文件(字符流)

    @Test
        public void test10() throws Exception {
            // 创建输出流对象
            Writer writer = new FileWriter("f:/hello.txt", true);
            // 创建BufferedWriter对象
            BufferedWriter bufferedWriter = new BufferedWriter(writer);
            // 换行
            bufferedWriter.newLine();
            // 写入
            bufferedWriter.write("BufferedWriter的练习1");
            // 换行
            bufferedWriter.newLine();
            // 写入
            bufferedWriter.write("BufferedWriter的练习2");
            bufferedWriter.close();
            writer.close();
            System.out.println("***********把写入的内容读取到控制台上**************");
            Reader reader = new FileReader("f:/hello.txt");
            BufferedReader bufferedReader = new BufferedReader(reader);
            String line = null;
            while ((line = bufferedReader.readLine()) != null) {
                System.out.println(line);
            }
            bufferedReader.close();
            reader.close();
        }
    BufferedWriter

    15.使用InputStreamReader解决中文乱码问题

    @Test
        public void test11() throws Exception {
            // 创建输入流对象
            InputStream stream = new FileInputStream("f:/hello.txt");
            // 使用InputStreamReader来解决乱码
            InputStreamReader reader = new InputStreamReader(stream, "utf-8");
            // 读取
            BufferedReader bufferedReader = new BufferedReader(reader);
            String line = null;
            while ((line = bufferedReader.readLine()) != null) {
                System.out.println(line);
            }
            bufferedReader.close();
            reader.close();
            stream.close();
        }
    InputStreamReader

    16.读取2进制文件

    @Test
        public void test12() throws Exception {
            // 创建输入流
            InputStream is = new FileInputStream("f:/mini.mp3");
            // 读取2进制文件
            DataInputStream dis = new DataInputStream(is);
            System.out.println("******复制文件到另一个目录********");
            // 创建输出流
            OutputStream os = new FileOutputStream("f:/hello/mimi.mp3");
            // 以2进制的方式输出到指定的目录
            DataOutputStream dos = new DataOutputStream(os);
            int data;
            while ((data = dis.read()) != -1) {
                // 把mini.mp3的内容复制到mimi.mp3文件中
                dos.write(data);
            }
            // 关闭流
            dos.close();
            os.close();
            dis.close();
            is.close();
        }
    DataInputStream

     17.java IO流的分类

      01.按流向分类

        001.输入流:InputStream     Reader

        002.输出流:OutputStream  writer

      02.按照数据处理划分

        001.字节流:

          (1)输入流:InputStream  FileInputStream

          (2)输出流:OutputStream  FileOutputStream

        002.字符流:

          (1)输入流:

              Reader

                InputStreamReader(解决乱码问题)  FileReader

                BufferedReader(带缓存区,可以逐行读取)

          (2)输出流:

              Writer

                OutputStreamWriter  FileReader

                BufferedWriter

  • 相关阅读:
    文件下载链接
    Python Web服务器
    打印字符串替换
    python 将数据写入excel
    python Telnet通讯
    Python 串口通讯
    monkey 原理,环境搭建、命令详解
    Andriod 四大组件,六大布局
    python练习题100例
    Activity的基本概念与Activity的生命周期
  • 原文地址:https://www.cnblogs.com/milu0620/p/7002751.html
Copyright © 2011-2022 走看看