zoukankan      html  css  js  c++  java
  • JAVA之io流

    一、概念:

    1、字节流和字符流:

    一次处理一个字节byte的,叫字节流;一次处理一个字符char的,叫字符流。

    • 在处理中文的时候,经常会用到字符流。
    • 字符流在使用时会有编码问题。
    • 字节流和字符流可以相互转换,有专门的通道,编码就是在通道中完成的。

    2、节点流和过滤流:

    原始流的开始或结束的地方,叫节点流;提供对流进行功能扩充的流,叫过滤流,比如:文件的压缩、加密、解密等。

    3、缓冲流:

    buffer。可以解决字节流读取速度慢的问题,可以一字节一字节的读入到缓冲流中,再一次性写出到磁盘。

    4、输入流是读,输出流是写。

    • 读和写是针对于内存来说的,从磁盘读入到内存,是输入;从内存写入到磁盘,是输入出。
    • 对应于字符流的是抽象类Reader和Writer。
    • 对应于字节流的是抽象类InputStream和OutputStream

    二、应用:

    1、字节流的应用:配置文件的处理。

    输出流使用.write()方法写出,输入流使用.read()方法读入。

    输出流使用.flush()方法将内容刷入到磁盘里,目前java的.close()方法中自带有flush()方法,因此.flush()方法不写也可以。

    • 输出流FileOutputStream:如果文件不存在,会自动创建;
    • 输入流FileInputStream:如果文件不存在,不会创建。
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    
    public class StreamDemo {
        public static void main(String[] args) throws Exception {
        FileOutputStream fos = new FileOutputStream("b.txt");
            fos.write(1);
            fos.flush(); //用于将内容刷入到磁盘里
            fos.close(); //java的close()自带flush(),不写flush()也可以。
    
            FileInputStream fis = new FileInputStream("b.txt");
            int x = fis.read(); //.read()是一个字节一个字节的读
            System.out.println(x); //由于字节流读入的都是二进制字节,不会显示成数字或字母,而是乱码
    } }

     2、字符流的应用:

    import java.io.*;
    
    public class CharStreamDemo {
        public static void main(String[] args) throws IOException {
            PrintWriter out = new PrintWriter("test1.txt");
            out.println("大家好");
            out.println("haha");
            out.close();
            //        BufferedReader是PrintWriter的初级版
            PrintWriter out2 = new PrintWriter("test1.txt");
            out2.println("你也好");
            out2.println("hi");
            out2.close();
        }
    } 
    
    //使用这种方式写的文件,文件内容会覆盖,最终只会留下 "你也好""hi"

    3、字符流与字节流结合使用:

    使用字符流与字节流结合的方式,解决两个问题:1、可以设置编码类型  2、可以对文件内容进行追加写,而不会覆盖。

    import java.io.*;
    
    public class CharStreamDemo {
        public static void main(String[] args) throws IOException {
        PrintWriter out3 = new PrintWriter(
                    new OutputStreamWriter( //OutputStreamWriter是字节流和字符流中间的通道
                    new FileOutputStream("test1.txt",true), //true为是否追加
                            "utf-8")); //这里设置编码类型
            out3.println("都好");
            out3.close();

    使用.readLine()方法,可以一行一行读入。

    import java.io.*;
    
    public class CharStreamDemo {
        public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(
                            new InputStreamReader( //InputStreamReader是字符流和字节流的通道
                            new FileInputStream("test1.txt")));
            String str = in.readLine(); //一行一行读
            System.out.println(str);
            System.out.println("===================");
    
            //全部读取
            String str1 = null;
            while ((str1 = in.readLine())!=null){ //这样写的好处是避免二次读入占用内存
                System.out.println(str1);
            }
            in.close();
        }
    } 
            //结果:
    //        你也好
    //        ===================
    //        hi
    //        都好
  • 相关阅读:
    Python之print字典
    SpringBoot入门 (六) 数据库访问之Mybatis
    SpringBoot入门 (四) 数据库访问之JdbcTemplate
    SpringBoot入门 (三) 日志配置
    SpringBoot入门 (一) HelloWorld
    设计模式之装饰器模式
    设计模式之模板模式
    spring之mvc原理分析及简单模拟实现
    设计模式之单例
    国产密码研究
  • 原文地址:https://www.cnblogs.com/yanwuliu/p/10833546.html
Copyright © 2011-2022 走看看