【Java后端】文件IO流

IO从字面上理解就是input和output:

  • 流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输
  • IO流就是用来处理设备间数据传输问题的。常见的应用:文件复制;文件上传;文件下载

输入流就是输入数据,输出流就是写出数据。

按照数据类型划分的话:

  • 字节流:字节输入流和字节输出流
  • 字符流:字符输入流和字符输出流

字节流的方法:

void write(int b)  :  将指定的字节写入此文件输出流 一次写一个字节数据
void write(byte[] b) :将 b.length字节从指定的字节数组写入此文件输出流 一次写一个字节数组数据
void write(byte[] b, int off, int len) : 将 len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流 一次写一个字节数组的部分数据


字节流写数据如何实现换行:

    windows:\r\n
    linux:\n
    mac:\r

注:字节流读数据(一次读一个字节数据)

缓冲流:

缓冲流是当读取数据量大的文件时,读取的速度会很慢,很影响程序执行的效率,Java中提高了一套缓冲流,它的存在,可提高IO流的读写速度。

字节缓冲流:

字节缓冲流根据流的方向,共有2个包括BufferedOutputStreamBufferedInputStream

① 写入数据到流中,字节缓冲输出流 BufferedOutputStream;

 ②读取流中的数据,字节缓冲输入流 BufferedInputStream;

它们的内部都包含了一个缓冲区,通过缓冲区读写,提高了IO流的读写速度。

字节缓冲流的方法:

BufferedOutputStream(OutputStream out)    创建字节缓冲输出流对象
BufferedInputStream(InputStream in)    创建字节缓冲输入流对象


字节打印流:

PrintStream(String fileName):使用指定的文件名创建新的打印流
        使用继承父类的方法写数据,查看的时候会转码;使用自己的特有方法写数据,查看的数据原样输
        可以改变输出语句的目的地
        public static void setOut(PrintStream out):重新分配“标准”输出流
 

    打印流分类
        字节打印流:PrintStream
        字符打印流:PrintWriter
    打印流的特点:
     ① 只负责输出数据,不负责读取数据
     ②永远不会抛出IOException
     ③ 有自己的特有方法


字符流:

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


1 字符输入流【Reader】

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

    public void close() :关闭此流并释放与此流相关联的任何系统资源。
    public int read(): 从输入流读取一个字符。
    public int read(char[] cbuf): 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 。

 2 FileReader类

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

        注:①字符编码:字节与字符的对应规则:Windows系统的中文编码默认是GBK编码表。

               ②idea中UTF-8

        字节缓冲区:一个字节数组,用来临时存储字节数据。

构造方法

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

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

File类

1.1File类概述和构造方法【应用】

  • File类介绍

    • 它是文件和目录路径名的抽象表示

    • 文件和目录是可以通过File封装成对象的

    • 对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以是不存在的。将来是要通过具体的操作把这个路径的内容转换为具体存在的

  • File类的构造方法

    方法名 说明
    File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例
    File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例
    File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例

       

public class FileDemo01 {
    public static void main(String[] args) {
        //File(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
        File f1 = new File("E:\\itcast\\java.txt");
        System.out.println(f1);

        //File(String parent, String child):从父路径名字符串和子路径名字符串创建新的 File实例。
        File f2 = new File("E:\\itcast","java.txt");
        System.out.println(f2);

        //File(File parent, String child):从父抽象路径名和子路径名字符串创建新的 File实例。
        File f3 = new File("E:\\itcast");
        File f4 = new File(f3,"java.txt");
        System.out.println(f4);
    }
}

1.2File类创建功能【应用】

  • 方法分类

    方法名 说明
    public boolean createNewFile() 当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件
    public boolean mkdir() 创建由此抽象路径名命名的目录
    public boolean mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录

你可能感兴趣的:(菜鸟学习,java,开发语言)