首页 > 技术文章 > java IO流

renxixao 2019-09-04 02:24 原文

 

当不同的介质之间有数据交互的时候 JAVA就使用流来实现  数据源可以是文件 还可以是数据库 网络甚至是其他的程序  比如 站在程序的角度来看就叫做输入流 反之就是输出流

# ## IO流的分类  

根据按照流向可分为:输入流(读取文件的数据到程序中 读取数据)和输出流(读取程序的数据写出到文件中 写出数据)  
根据按照数据类型可分为:字节流(传输数据的最基本单位是字节的流)和字符流(传输过程中 传输数据的最基本单位是字符的流)

字节流可分为:字节输入流(读取数据  InputStream)和字节输出流(写出数据  OutputStream)    以Stream结尾大多数是字节流

字符流可分为:字符输入流(读取数据  Reader)和字符输出流(写出数据  Writer)  

 

# ## InputStream

InputStream 是所有的输入字节流的父类 它是一个抽象类 其子类包括  ByteArrayInputStream  StringBufferInputStream  FileInputStream  分别从Byte 数组 StringBuffer 和本地文件中读取数据  PipedInputStream是从与其它线程共用的管道中读取数据

字节流读取数据方式有两种  

int read()  一次读取一个字节

    @Test
    public void readDate() throws IOException {
        FileInputStream fis = new FileInputStream("FileOutputStreamDemo.java");
        // //通过测试 读取的数据是-1 说明已经读取到文件的末尾了
        int by = 0;
        // 读取,赋值,判断
        while ((by = fis.read()) != -1) {
            System.out.print((char) by);
        }
        // 释放资源
        fis.close();
}

使用流的时候一定要最后close() 有两个原因  1.让流对象变成垃圾 这样就可以被垃圾回收器回收了  2.通知系统去释放跟该文件相关的资源

 

int read(byte[] b)  一次读取一个字节数组

    @Test
    public void readDate2() throws IOException {
        FileInputStream fis = new FileInputStream("FileOutputStreamDemo.java");
        byte[] bys = new byte[1024];
        int len = 0;
        while ((len = fis.read(bys)) != -1) {
            System.out.print(new String(bys, 0, len));
        }
        // 释放资源
        fis.close();
    }

 

# ## OutStream

FileOutputStream构造:
   FileOutputStream(File file)   参数为文件路径
          FileOutputStream(String name) 参数为文件名 当前项目的跟目录下

  @Test
    public  void write() throws IOException {
        FileOutputStream fos = new FileOutputStream("d://fos.txt");
        //写数据
        fos.write("hello,IO".getBytes());
        fos.write("java".getBytes());
        fos.close();
    }

 

public void write(int b)   写一个字节

    @Test
    public  void write() throws IOException {
       // 创建字节输出流对象
       FileOutputStream fos = new FileOutputStream("fos.txt");
       int text= 98;
       // 调用write()方法
       fos.write(text); 
    }    

 

public void write(byte[] b)  写一个字节数组

    @Test
    public  void write() throws IOException {
       // 创建字节输出流对象
       FileOutputStream fos = new FileOutputStream("fos1.txt");
       byte[] bys={97,98,99,100,101};
       fos.write(bys);
    }    

 


public void write(byte[] b,int off,int len)   写一个字节数组的一部分

   @Test
    public  void write() throws IOException {
       // 创建字节输出流对象
       FileOutputStream fos = new FileOutputStream("fos1.txt");
       byte[] bys={97,98,99,100,101};
       fos.write(bys,1,3);
    }    

 

 

 

推荐阅读