zoukankan      html  css  js  c++  java
  • IO流(一)字节流

    1:io流体系:对数据进行读写操作。所以IO不是读就是写咯。

    2:io流的相关的类:java.io包。

    有关IO的操作都会产生IOException异常

    3:io:参照物是程序,

             i:input.进来,读取数据到程序中。

             o:output:出去,将数据从程序中写出去。

    4:io流的分类,相关的类都会有相应的单词。

             4.1:从数据的流向分。个人理解为就是内存和硬盘之间的数据交换,内存上的数据是暂时性的,而硬盘上的数据是永久性的。

                       Input(输入):读取数据,数据往程序中流。或者说:将硬盘上的数据放到内存上

                       Output(输出):写出数据,将数据从程序中写出去。或者说:将内存上的数据放到硬盘上

             4.2:字节流和字符流

                       Stream:字节流,所有的数据都可以用字节流操作。计算机真正能识别的就是010101这些东西,8个0或者1组合成位,8位就是一个字节了。

                       Reader或者Writer:字符流。字符流是在字节流的基础上加了编码机制。只能对文字进行操作,虽说是文字,更贴切的说是文本文件,并不包括.doc等富文本文件,因为这些文件里面可以放图片或者其他的非文字内容。不能够对图片或者音频文件进行操作。

             InputSteam:读取字节流。OutputStream:输出字节流。

             Reader:读取字符流,   Writer:写出字符流。

    5:文件字节流

             OutputStream,:抽象类  

                                文件输出字节流:FileOutputStream:节点流,跟目标设备相关联。

        实例一:

     1 import java.io.FileOutputStream;
     2 import java.io.IOException;
     3 
     4 public class FileOutputStreamDemo1 {
     5     
     6     public static void main(String[] args) throws IOException {
     7         //1.创建文件输出流对象,参数为全路径名
     8         FileOutputStream fos = new FileOutputStream("e:\aa.txt");
     9         //2.写出数据
    10         //2.1准备数据
    11         String str = "要写出的数据";
    12         //2.2将数据转为字节数组的形式
    13         byte[] b = str.getBytes();
    14         //3.0将数据按照一个个字节地写出目标文件中
    15         /*for(int i=0; i<b.length; i++){
    16             fos.write(b[i]);
    17         }*/
    18         //3.1以下是将整个数组输出去,和3.0可到达相同的效果
    19         fos.write(b);
    20         //4.释放资源
    21         fos.close();
    22     }
    23 
    24 }
    文件输出字节流示例一

                                BufferedInputStream:处理流,必须先有节点流。为了增加效率。处理的方式是将节点流包装起来

     1 public static void testBufferedOutputStream() throws IOException{
     2         //在使用带缓冲区的字节流的时候先要有一个节点流作为参数,或者说先指定一个目标文件
     3         FileOutputStream fos = new FileOutputStream("d:\test.txt");
     4         BufferedOutputStream bos = new BufferedOutputStream(fos);
     5         
     6         //将以下文字写到目标文件中去
     7         String str = "这几个文字即将通过带缓冲区的字节流写到一个文本文件中";
     8         bos.write(str.getBytes());
     9         //写完之后记得要刷新才能真正写入到文件中,不然还会保存在缓冲区里,直到释放资源
    10         bos.flush();
    11         //释放资源(关闭流)
    12         bos.close();
    13         
    14     }
    带缓冲区的字节流

             InputStream:抽象类。

                                文件输入字节流:FileInputStream:节点流,和要读取那个文件关联起来

     1 import java.io.FileInputStream;
     2 import java.io.IOException;
     3 
     4 public class FileInputStreamDemo1 {
     5     public static void main(String[] args) throws IOException {
     6         //1.创建字节输入流对象
     7         FileInputStream fis = new FileInputStream("e:\bb.txt");
     8         //2.开始读取数据
     9 //        System.out.println((char)fis.read());
    10         int b;
    11         while((b=fis.read())!=-1){
    12             System.out.print((char)b);
    13         }
    14         fis.close();
    15     }
    16 }
    文件字节输出流

                                BufferedOutputStream:带缓冲区的。也是为了增加效率,处理的方式是将节点流包装起来

    import java.io.BufferedInputStream;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    
    /*
     * 将一个文件的文字输出到控制台
     */
    public class BufferedInputStreamDemo1 {
        
        public static void main(String[] args) {
            
            FileInputStream fis = null;
            BufferedInputStream bis = null;
            try {
                fis = new FileInputStream("d:\aa.txt");
                bis = new BufferedInputStream(fis);
                //byte数组用来装读取到的数据
                byte[] b = new byte[1024];
                int len = -1;
                while((len = bis.read(b))!=-1){
                    System.out.println(new String(b, 0, len));
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            
        }
    
    }
    带缓冲区的文件字节输入流

    6:字节流:在文件系统中,任何文件都是以二进制形式存储的,二进制用位体现(8位为一个二进制单元),8位=1字节,所以字节流可以处理任何文件。

             6.1字节流常用的一些类:

                       6.1.1输入流read(), 读到末尾返回-1

    常用read(byte[] b, int off, int len) 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。

                                FileInputStream:文件输入流

                                BufferedInputStream:带缓冲区的输入流,先要传入一个节点流(输入流)作为参数

                       6.1.2输出流write()

    常用write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。

                                FileOutputStream:文件输入流

                                BufferedOutputStream:带缓冲区的输入流,先要传入一个节点流(输入流)作为参数

     结合输入输出流写一个文件复制的工具:

    public static boolean copyFile( String filePath,String target){
        
            boolean flag = false;
            //输出流,将数据写入到目标文件中
            FileOutputStream fos = null;
            //输入流,将要用的文本拿到程序中
            FileInputStream fis = null;
            //读取文本
            byte[] b = new byte[1024];
            //每次读取字符数据的有效长度
            int length = -1;
            
            try {
                fis = new FileInputStream(filePath);
                fos = new FileOutputStream(target);
                /*
                 * fis.read(b):从fis关联的文件中每次读取 1024 个字节,
                 * 并把读取到的字节数据保存这个数组里面,
                 * 但是这个文件并不是只有1024 这个么大,有可能要读多次,所以要用循环
                 * 寻到的条件是读到文件没有得读了,就是读到最后了就不读了,
                 * 读到末尾的返回值是-1,如果返回值是-1则停止循环
                 * 
                 */
                while((length=fis.read(b)) != -1){//读到文件末尾就返回-1,不在往下读取
                    //将读到的数据写入目标文件中
                    fos.write(b, 0, length);
                    fos.flush();//将数据刷到目标文件
                }
                System.out.println("文件复制成功!");
            } catch (FileNotFoundException e1) {
                e1.printStackTrace();
            }catch (IOException e) {
                e.printStackTrace();
            }finally{
                //关闭释放资源
                try {
                    fos.close();
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            flag = true;
            return flag;
        }
  • 相关阅读:
    中文分词技术
    布隆过滤器(Bloom Filter)详解
    真正理解Mysql的四种隔离级别
    从内核文件系统看文件读写过程
    如何评价腾讯开源的消息中间件TubeMQ?
    零拷贝(Zero-copy)及其应用详解
    深入了解RabbitMQ
    (四)下载利器aria2
    (三)轻量级文件服务器filebrowser
    log4j 2整理
  • 原文地址:https://www.cnblogs.com/xinge1993/p/4716386.html
Copyright © 2011-2022 走看看