zoukankan      html  css  js  c++  java
  • 常用的IO流类总结

    常用的IO流类的框架如下,重点是流式,分为字节流和字符流2种。

     

    一、字节流和字符流的区别

    • 字节流操作的基本单元是字节;字符流操作的基本单元是字符(2个字节)
    • 字节流默认不使用缓冲区;字符流使用缓冲区
    • 字节流通常用于处理二进制数据,不支持直接读写字符;字符流通常用于处理文本数据
    • 在读写文件需要对文本内容进行处理:按行处理、比较特定字符的时候一般会选择字符流;仅仅读写文件,不处理内容,一般选择字节流

    二、基本流类的使用

    1. FileOutputStream:相对于内存是输出流,用于将数据写入File(硬盘),常用fos.write()方法

    1         //文件输出流是用于将数据写入File或FileDescriptor的输出流
    2         FileOutputStream fos = new FileOutputStream("F://out.txt");
    3         fos.write(65);
    4         fos.write(',');
    5         byte[] bytes ={65,66,67,68,69,70};
    6         fos.write(bytes);
    7         fos.write(',');
    8         fos.write(bytes,0,3);
    9         fos.close();

    2.FileInputStream:相对于内存是输入流,用于将数据从硬盘中读取到内存,常用的fis.read()方法

     1 //从文件中读取信息到内存                                                                    
     2 FileInputStream fis = new FileInputStream("F://0JavaTest/in.txt");               
     3 int a = fis.read();//读取单个字符                                                      
     4 System.out.println((char)a);                                                     
     5 byte[] bytes = new byte[10];                                                     
     6 int len =  fis.read(bytes);//读取多个字符,推荐使用                                         
     7 System.out.println(new String(bytes,0,len));                                     
     8 len = fis.read(bytes);                                                           
     9 System.out.println(new String(bytes,0,len));                                     
    10 len = fis.read(bytes);                                                           
    11 System.out.println(new String(bytes,0,len));                                     
    12 fis.close();//关闭流,释放分配的系统资源    

    3.FileWriter:相对于内存是字符输出流,将数据写入到硬盘文件中,是以一个字符为操作单位,适合传输文字数据等场合。

    1  FileWriter fw = new FileWriter("F://0JavaTest/writer.txt");
    2         fw.write('a');
    3         fw.write(",");
    4         fw.write("锄禾日当午,汗滴禾下土");
    5         fw.write(",");
    6         fw.write(15);//传入ASCII码:15对应的值
    7         fw.close();

    4.FileReader:相对于内存是字符输入流,将数据从硬盘文件里读入到内存中,供程序操作,是以一个字符为操作单位,适合传输文字数据等场合。

     1        FileReader fr = new FileReader("F://0JavaTest/reader.txt");
     2      /*   //  1.每次读取一个字符
     3         while(true){
     4             int a = fr.read();
     5             if(a ==-1) break;
     6             System.out.println((char)a);
     7         }*/
     8 
     9         //  2.每次读取一个字符数组
    10         char[] chars = new char[100];//数组默认值为空格,多余未使用的数组位置需要处理
    11         int len = fr.read(chars);
    12         System.out.println(new String(chars,0,len));
    13         System.out.println("字符个数为:"+len);
    14         fr.close();

    三、字节流转换成字符流

    1.InputStreamReader:从外部获取到字节流的场景,需要处理文本数据,用字节流直接读,会出现读1个字节,半个字符的情况,不能满足我们的需求,因此需要做字节-字符流的转换。

    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class Demo5 {
        public static void main(String[] args) throws IOException {
            //  1.自己创建的或从外部获取的字节流
            FileInputStream fis = new FileInputStream("F://0JavaTest/reader.txt");
            //  2.将字节流”装饰“成字符流,使之能利用isr的方法操作字符流
            InputStreamReader isr = new InputStreamReader(fis);
    
            while(true){
                int c = isr.read();
                if(c == -1) break;
                System.out.println((char)c);
            }
    
            isr.close();
        }
    
    }

    2.OutputStreamWriter:从外部获取到字节流的场景,需要处理文本数据,用字节流直接操作,会出现读1个字节,半个字符的情况,因此需要做字节-字符流的转换

    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    
    public class Demo6 {
        public static void main(String[] args) throws IOException {
            //   1.自己创建的或从外部获取的字节流
            FileOutputStream fos = new FileOutputStream("F://0JavaTest/writer.txt");
            //  2.将字节流”装饰“成字符流,使之能利用osw的方法操作字符流
            OutputStreamWriter osw = new OutputStreamWriter(fos);
            osw.write("床前明月光,疑是地上霜");
            osw.flush();//刷新缓存,将缓存字符写到文件中
            osw.close();
        }
    }

    四、缓存读取流

    BufferedReader:只能读取字符输入流,转换成带缓存的流,提供readLine()方法,一次读取一行数据,比较方便。

     1 //  4.缓存读取流,将字符输入流,转换成带有缓存的,可以一次读取一行数据
     2        //FileInputStream fis = new FileInputStream("F://0JavaTest/in.txt");
     3         FileInputStream fis = new FileInputStream("E:\00java入门\KAIKEBA\CODE\Demo\com.kaikeba.c1\in2.txt");
     4         InputStreamReader isr = new InputStreamReader(fis);
     5         BufferedReader br = new BufferedReader(isr);
     6         while (true) {
     7             String text = br.readLine();
     8             if (text != null) {
     9                 System.out.println(text);
    10             } else {
    11                 break;
    12             }
    13         }

    .

  • 相关阅读:
    Spark的Java API例子详解
    idea 创建scala maven工程
    Hbase 创建表 插入数据Hb
    zookeeper.ClientCnxn: Opening socket connection to server CDH03/192.168.121.147:2181. Will not attem
    null, message from server: "Host 'CDH01' is not allowed to connect to this MySQL server
    虚拟机设置静态网络
    linux无密访问
    Hbase启动出问题 master.HMaster: Failed to become active master
    简单的深度优先例子
    常用git操作命令
  • 原文地址:https://www.cnblogs.com/PengLuo22/p/13418710.html
Copyright © 2011-2022 走看看