zoukankan      html  css  js  c++  java
  • JavaSE_10_IO流

    1.1 什么是IO

    把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为输入input输出output ,即流向内存是输入流,流出内存的输出流。

    1.2 IO的分类

    • 输入流 :把数据从其他设备上读取到内存中的流。

    • 输出流 :把数据从内存 中写出到其他设备上的流。

    格局数据的类型分为:字节流字符流

    • 字节流 :以字节为单位,读写数据的流。

    • 字符流 :以字符为单位,读写数据的流。

    1.3 顶级父类们

    字节流:字节输入流InputStream    字节输出流OutputStrem

    字符流:字符输入流 Reader           字符输出流Writer

    2.1 一切皆为字节

    一切文件数据(文本、图片、视频等)在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此。

    2.2 字节输出流【OutputStream】

    java.io.OutputStream抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。它定义了字节输出流的基本共性功能方法。

    • public void close() :关闭此输出流并释放与此流相关联的任何系统资源。

    • public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。

    • public void write(byte[] b):将 b.length字节从指定的字节数组写入此输出流。

    • public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。

    • public abstract void write(int b) :将指定的字节输出流。

    2.3 FileOutputStream类

    java.io.FileOutputStream类是文件输出流,用于将数据写出到文件。

    构造方法

    • public FileOutputStream(File file):创建文件输出流以写入由指定的 File对象表示的文件。

    • public FileOutputStream(String name): 创建文件输出流以指定的名称写入文件。

    public class FileOutputStreamConstructor throws IOException {
        public static void main(String[] args) {
                // 使用File对象创建流对象
            File file = new File("a.txt");
            FileOutputStream fos = new FileOutputStream(file);
          
            // 使用文件名称创建流对象
            FileOutputStream fos = new FileOutputStream("b.txt");
        }
    }

    写出字节write(int b|byte) 方法,每次可以写出一个或多个字节数据,代码使用演示:

    //一次写多个字节或多个
            byte [] bytes={-65,-66,-67,68,69};
            fos.write(bytes);
            fos.write("你好".getBytes());
            fos.close();

    数据追加续写和换行

    • public FileOutputStream(File file, boolean append): 创建文件输出流以写入由指定的 File对象表示的文件。

    • public FileOutputStream(String name, boolean append): 创建文件输出流以指定的名称写入文件。

    • fos.write("
      ".getBytes());换行

    2.4 字节输入流【InputStream】

    java.io.InputStream抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存中。它定义了字节输入流的基本共性功能方法。

    • public void close() :关闭此输入流并释放与此流相关联的任何系统资源。

    • public abstract int read(): 从输入流读取数据的下一个字节。

    • public int read(byte[] b): 从输入流中读取一些字节数,并将它们存储到字节数组 b中 。

    2.5 FileInputStream类

    • FileInputStream(File file): 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。

    • FileInputStream(String name): 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。

    public class FileInputStreamConstructor throws IOException{
        public static void main(String[] args) {
                // 使用File对象创建流对象
            File file = new File("a.txt");
            FileInputStream fos = new FileInputStream(file);
          
            // 使用文件名称创建流对象
            FileInputStream fos = new FileInputStream("b.txt");
        }
    }

    读取字节数据

    读取字节read方法,每次可以读取一个字节的数据,提升为int类型,读取到文件末尾,返回-1,代码使用演示:

    使用字节数组读取read(byte[] b),每次读取b的长度个字节到数组中,返回读取到的有效字节个数,读取到末尾时,返回-1 ,代码使用演示:

    public class Demo03InputStream {
        public static void main(String[] args) throws IOException {
            File file = new File("a.txt");
            FileInputStream fis = new FileInputStream("a.txt");
            int len = 0;
            byte[] bytes = new byte[1024];
            while ((len = fis.read(bytes)) != -1) {
                System.out.println(new String(bytes,0,len));
            }
            fis.close();
        }

    2.6 字节流练习:图片复制

    public class Demo04Copy {
        public static void main(String[] args) throws IOException {
            long s=System.currentTimeMillis();
          //读流 FileInputStream fis
    = new FileInputStream("1.jpg");
          //写流 FileOutputStream fos
    = new FileOutputStream("2.jpg");
    int len=0; byte[] bytes = new byte[1024]; while ((len=fis.read(bytes))!=-1){ fos.write(bytes,0,len); } fos.close(); fis.close(); System.out.println(System.currentTimeMillis()-s); } }

    3.字符流

    当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储。所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件。

    3.1 字符输入流【Reader】

    java.io.Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法。

    • public void close() :关闭此流并释放与此流相关联的任何系统资源。

    • public int read(): 从输入流读取一个字符。

    • public int read(char[] cbuf): 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 。

    3.2 FileReader类    

    java.io.FileReader类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。 

    构造方法

    • FileReader(File file): 创建一个新的 FileReader ,给定要读取的File对象。

    • FileReader(String fileName): 创建一个新的 FileReader ,给定要读取的文件的名称。

    public class FileReaderConstructor throws IOException{
        public static void main(String[] args) {
                // 使用File对象创建流对象
            File file = new File("a.txt");
            FileReader fr = new FileReader(file);
          
            // 使用文件名称创建流对象
            FileReader fr = new FileReader("b.txt");
        }
    }

    读取字符数据

    1. 读取字符read方法,每次可以读取一个字符的数据,提升为int类型,读取到文件末尾,返回-1,循环读取,代码使用演示:

    2. 使用字符数组读取read(char[] cbuf),每次读取b的长度个字符到数组中,返回读取到的有效字符个数,读取到末尾时,返回-1 ,代码使用演示:

    字符流拷贝

    /**
     * 字节流的拷贝
     */
    public class Demo07Copy {
        public static void main(String[] args) throws IOException {
         //字符读流 FileReader fr
    = new FileReader("b.txt");
         //字符写流 FileWriter fw
    = new FileWriter("c.txt"); char[] chars = new char[1024]; int len = 0; while ((len = fr.read(chars)) != -1) { fw.write(chars, 0, len); } fr.close(); fw.close(); } }

    3.3 字符输出流【Writer】

    java.io.Writer抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节输出流的基本共性功能方法。

    • void write(int c) 写入单个字符。

    • void write(char[] cbuf)写入字符数组。

    • abstract void write(char[] cbuf, int off, int len)写入字符数组的某一部分,off数组的开始索引,len写的字符个数。

    • void write(String str)写入字符串。

    • void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数。

    • void flush()刷新该流的缓冲。

    • void close() 关闭此流,但要先刷新它。

    3.4 FileWriter类

    构造方法

    • FileWriter(File file): 创建一个新的 FileWriter,给定要读取的File对象。

    • FileWriter(String fileName): 创建一个新的 FileWriter,给定要读取的文件的名称。

    当你创建一个流对象时,必须传入一个文件路径,类似于FileOutputStream。

    public class FileWriterConstructor {
        public static void main(String[] args) throws IOException {
                // 使用File对象创建流对象
            File file = new File("a.txt");
            FileWriter fw = new FileWriter(file);
          
            // 使用文件名称创建流对象
            FileWriter fw = new FileWriter("b.txt");
        }
    }

    写入字符数据

    1. 写出字符write方法,每次可以读取一个字符的数据,提升为int类型,读取到文件末尾,返回-1,循环读取,代码使用演示:

    2. 写出字符数组write(char[] cbuf)write(char[] cbuf, int off, int len) ,每次可以写出字符数组中的数据,用法类似FileOutputStream,代码使用演示:

    字符流拷贝

    /**
     * 字节流的拷贝
     */
    public class Demo07Copy {
        public static void main(String[] args) throws IOException {
         //字符读流 FileReader fr = new FileReader("b.txt");
         //字符写流 FileWriter fw = new FileWriter("c.txt"); char[] chars = new char[1024]; int len = 0; while ((len = fr.read(chars)) != -1) { fw.write(chars, 0, len); } fr.close(); fw.close(); } }

     

  • 相关阅读:
    第三方驱动备份与还原
    Greenplum 解决 gpstop -u 指令报错
    yum安装(卸载)本地rpm包的方法(卸载本地安装的greenplum 5.19.rpm)
    Java JUC(java.util.concurrent工具包)
    netty 详解(八)基于 Netty 模拟实现 RPC
    netty 详解(七)netty 自定义协议解决 TCP 粘包和拆包
    netty 详解(六)netty 自定义编码解码器
    netty 详解(五)netty 使用 protobuf 序列化
    netty 详解(四)netty 开发 WebSocket 长连接程序
    netty 详解(三)netty 心跳检测机制案例
  • 原文地址:https://www.cnblogs.com/asndxj/p/11774045.html
Copyright © 2011-2022 走看看