• Java学习:I/O流


    字节输入流:InputStream(抽象类)

    字节输出流:OutputStream(抽象类)

    FileOutputStream为OutpuStream的子类

    其中包括的构造方法为:

    FileOutputStream(File file)
              创建一个向指定 File 对象表示的文件中写入数据的文件输出流。

    FileOutputStream(String name)
              创建一个向具有指定名称的文件中写入数据的输出文件流。

    其中成员方法包括:

    close()
              关闭此文件输出流并释放与此流有关的所有系统资源。

    write(byte[] b)
              将 b.length 个字节从指定 byte 数组写入此文件输出流中。

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

    write(int b)
              将指定字节写入此文件输出流。

    FileOutputStream  fos = FileOutputStream("fos.txt");

    fos.write("Hello World".getBytes());

    fos.colse();

    以上代码表示 将创建一个字节输出流对象fos指向文件fos.txt,创建fos.txt这个文件,然后将Hello World转换成byte类型然后写入到fos.txt文件中。

    FileIntputStream是InputStream的子类

    构造方法与FileOutputStream类似

    FileInputStream(String name)
              通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。

    成员方法也类似

    read()
              从此输入流中读取一个数据字节。

    read(byte[] b)
              从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。

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

    close()
              关闭此文件输入流并释放与此流有关的所有系统资源。

    实操:将一个文件复制到另一个另一个文件

    代码如下

     1 FileInputStream fis = new FileInputStream("OutputStreamDemo.java");
     2         FileOutputStream fos = new FileOutputStream("c.java");
     3         
     4         //2.读取数据源中的数据,将读取到的数据写入目的地中
     5         int by;
     6         while ((by=fis.read())!=-1) {
     7             //System.out.println(by);
     8             //将读取到的字节写入fos中
     9             fos.write(by);
    10         }
    11         
    12         //释放资源
    13         fos.close();
    14         fis.close();
    CopyFile

     字符缓冲区流(也叫高效流):

    BufferedInputStream

    构造方法:

    BufferedInputStream(InputStream in)
              创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。

    成员方法:

    继承了父类的read方法。

    BufferedOutputStream

    BufferedOutputStream(OutputStream out)
              创建一个新的缓冲输出流,以将数据写入指定的底层输出流。

    成员方法:

    继承自父类的write()方法。

    低级流:基本的流,可以直接操纵文件。

    高级流:是操作基本流的流。

    练习代码如下

     1 //封装数据源和目的地
     2         BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D://b.mp4"));
     3         BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("j.mp4"));
     4                 
     5         //一次读写一个字节数组
     6         byte[] byf = new byte[1024];
     7         int len;
     8         while ((len = bis.read(byf))!=-1) {
     9             bos.write(byf, 0, len);    
    10         }
    11         
    12         
    13         //3.关流
    14         bos.close();
    15         bis.close();
    CopyMP4

    字符流

    Reader(抽象类)

    Writer(抽象类)

    InputStreamReader

    构造方法:

    InputStreamReader(InputStream in)

              创建一个使用默认字符集的 InputStreamReader。

    成员方法:

    read(char[] cbuf, int offset, int length)
              将字符读入数组中的某一部分。

    OutputStreamWriter

    OutputStreamWriter 是字符流通向字节流的桥梁

    构造方法:

    OutputStreamWriter(OutputStream out)

      创建使用默认字符编码的 OutputStreamWriter。

    成员方法:

    write(String str, int off, int len)
              写入字符串的某一部分。

    write(char[] cbuf, int off, int len)
              写入字符数组的某一部分。

    write(int c)
              写入单个字符

    flush()
              刷新该流的缓冲。

    FileReader和FileWriter分别为InputStreamReader和OutputStreamWriter的子类。

    其构造方法为分别为

    FileReader(File file)
              在给定从中读取数据的 File 的情况下创建一个新 FileReader

    FileReader(String fileName)
              在给定从中读取数据的文件名的情况下创建一个新 FileReader

    FileWriter(File file) 
              根据给定的 File 对象构造一个 FileWriter 对象。

    FileWriter(String fileName) 
              根据给定的文件名构造一个 FileWriter 对象。

    练习代码如下:

     1     //1.封装数据源和目的地
     2         FileReader fr = new FileReader("InputStreamReaderDemo.java");
     3         FileWriter fw = new FileWriter("d.java");
     4         
     5         
     6         //一次读写一个字符数组
     7         char[] chs = new char[1024];
     8         int len;
     9         while ((len=fr.read(chs))!=-1) {
    10             fw.write(chs, 0, len);
    11             fw.flush();
    12         }
    13         
    14         
    15         //3.关流
    16         fw.close();
    17         fr.close();    
    CopyFile

    方法flush和close的区别

    flush:刷新缓冲区,流对象可以继续使用。

    close:先刷新缓冲区,再关闭流对象。流对象不可以再使用。

    高效字符流:

    BufferedReader:字符缓冲输入流

    构造方法:

    BufferedReader(Reader in)
              创建一个使用默认大小输入缓冲区的缓冲字符输入流。

    特有方法:

    readLine()
              读取一个文本行。

    BufferedWriter:字符缓冲输出流

    构造方法:

    BufferedWriter(Writer out)
              创建一个使用默认大小输出缓冲区的缓冲字符输出流

    特有方法:

    newLine()
              写入一个行分隔符。

    利用高效字符流一次复制一行的复制文件。

    代码如下

     1 BufferedReader br = new BufferedReader(new FileReader("InputStreamReaderDemo.java"));
     2         BufferedWriter bw = new BufferedWriter(new FileWriter("copy.java"));
     3         
     4         //读取一行写一行
     5         String line;
     6         while ((line = br.readLine())!=null) {
     7             //System.out.println();
     8             bw.write(line);
     9             bw.newLine();
    10             bw.flush();
    11         }
    12         
    13         //释放资源
    14         bw.close();
    15         br.close();
    View Code
  • 相关阅读:
    Async/await 和 Promises 区别
    javaScript 如何使用js追加字符串呢?
    JavaScript深入之继承的多种方式和优缺点
    在原生JavaScript中创建不可变对象
    websocket的用途/场景
    爬虫新宠requests_html 带你甄别2019虚假大学 #华为云·寻找黑马程序员#
    #华为云·寻找黑马程序员#微服务-你真的懂 Yaml 吗?
    #华为云·寻找黑马程序员#【代码重构之路】使用Pattern的正确姿势
    Python-Excel 模块哪家强 #华为云·寻找黑马程序员#
    多元算力加持,华为云鲲鹏大数据服务公测上线
  • 原文地址:https://www.cnblogs.com/shaofanglazi/p/6840224.html
Copyright © 2020-2023  润新知