美文网首页
java的IO流

java的IO流

作者: 小石读史 | 来源:发表于2020-05-07 15:24 被阅读0次

根据传输数据的类型,分为字节流和字符流,根据流向的不同分为输入流和输出流。

以下是JAVAIO流框架:


image.png

从图中可以看出,以Stream结尾的为字节流,以Writer或者Reader结尾的为字符流。所有的输入流都是抽象类IuputStream(字节输入流)或者抽象类Reader(字符输入流)的子类,所有的输出流都是抽象类OutputStream(字节输出流)或者抽象类Writer(字符输出流)的子类。

1、字符流FileReader和FileWriter
使用FileReader和FileWriter类完成文本文件复制
FileReader


image.png
public class TestFileReader {
    public static void main(String[] args)throws IOException {
        FileReader fileReader = new FileReader("F:\\daren.txt");
        char[] buffer = new char[32];
        int hasRead = 0;
        while((hasRead = fileReader.read(buffer)) > 0){
            System.out.print(new String(buffer, 0, hasRead));
        }
        fileReader.close();
    }
}

FileWriter


image.png
public class FileWriterTest {
    public static void main(String[] args)throws IOException {
        File result = new File("F:\\静夜思.txt");
        FileWriter fileWriter = new FileWriter(result);
        fileWriter.write("床前明月光,\r\n");
        fileWriter.write("疑是地上霜.\r\n");
        fileWriter.close();
    }
}

2、BufferedReader和BufferedWriter
BufferedReader和BufferedWriter出现的目的是为了对FileReader以及FileWriter的读写操作进行增强。
BufferedReader和BufferedWriter类各拥有8192个字符的缓冲区。当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并放满缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。如果缓冲区中的数据满了,才会一次对目的地进行写出。


image.png
image.png
public class BufferedReaderWriterTest {
    public static void main(String[] args) {
        //高效缓冲输入流
        BufferedReader reader = null;
        try {
            //传入的是reader的子类
            reader = new BufferedReader(new FileReader("F:\\静夜思.txt"));
            String line;
            //如果还有下一行就一直读下去readLine()用于读取一行
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        //高效缓冲输出流
        BufferedWriter writer = null;
        BufferedReader reader1;
        try {
            //创建高效缓冲输出流
            writer = new BufferedWriter(new FileWriter("F:\\静夜思2.txt"));
            //创建高效缓冲输入流
            reader1 = new BufferedReader(new FileReader("F:\\静夜思.txt"));
            String line;
            while ((line = reader1.readLine()) != null) {
                writer.write(line);
                writer.newLine();
                writer.flush();

            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (writer != null) {
                    writer.close();
                }
                if (reader != null) {
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

3、FileInputStream和FileOutputStream


image.png
image.png
public class FileInputStreamTest {
    public static void main(String[] args) throws IOException {
        FileInputStream fin = new FileInputStream("F:\\学习机.jpg");
        FileOutputStream fout = new FileOutputStream("F:\\学习机2.jpg");
        int len = 0;
        byte[] buff = new byte[1024];
        while ((len = fin.read(buff)) != -1) {
            fout.write(buff, 0, len);
        }
        fin.close();
        fout.close();
    }
}

4、BufferedInputStream&BufferedOutputStream
java IO流的继承关系如下
InputStream
|_FileInputStream
|_BufferedInputStream
BufferedInputStream 是套在其他InputStream之外的,是用来优化里面的InputStream的性能的,FileInputStream是读文件的实现,所以通常使用BufferedInputStream&BufferedOutputStream作为FileInputStream&FileOutputStream的外包装来优化读写的性能。

public class BufferedInputStreamTest {
    public static void main(String[] args) throws IOException {
        BufferedInputStream bfin = new BufferedInputStream(new FileInputStream("F:\\学习机.jpg"));
        BufferedOutputStream bfout = new BufferedOutputStream(new FileOutputStream("F:\\学习机3.jpg"));
        int len = 0;
        byte[] buff = new byte[1024];
        while ((len = bfin.read(buff)) != -1) {
            bfout.write(buff, 0, len);
        }
        bfin.close();
        bfout.close();
    }
}

相关文章

  • Java之IO流详解

    title: Java之IO流详解tags: Java IO流categories: Java IO流 大多数应用...

  • 从0开始复习java(9)--IO

    Java的io通过java.io包下的类和接口支持。主要有输入、输出流,又分为字节流和字符流。Java的io流使用...

  • Java IO详解

    1 Java IO流的概念,分类 1.1 Java IO流的概念 java的IO是实现输入和输出的基础,可以方便的...

  • java IO入门笔记

    1.java IO流的概念,分类,类图 1.1. java IO 流的概念 java的io是实现输入和输出的基础,...

  • Java的IO和NIO

    Java的IO和NIO 一、Java的IO Java的IO功能在java.io包下,包括输入、输出两种IO流,每种...

  • java IO流

    java IO流 java流操作的类和接口 java流类图结构 IO流的定义 流是一组有顺序的,有起点和终点的字节...

  • 28、说说Java 中 IO 流

    说说Java 中 IO 流 Java 中 IO 流分为几种? 1、按照流的流向分,可以分为输入流和输出...

  • 05-Java中的IO与NIO面试题(15题)

    1、Java 中 IO 流? Java 中 IO 流分为几种?按照流的流向分,可以分为输入流和输出流;按照操作单元...

  • java io 流

    java io 流 io 流总览 io 流主要提供四个接口 InputStream: 输入字节流 OutputSt...

  • Java的IO和NIO

    一、IO java的IO功能都在java.io包下,包括输入输出两种IO流,每种输入输出流又可分为字节流和字符流两...

网友评论

      本文标题:java的IO流

      本文链接:https://www.haomeiwen.com/subject/umboghtx.html