IO 流 —— 【基础知识】

1.流的分类

  • 按单位
    • 字节流:以字节为单位(8位),可以读写所有数据
    • 字符流:以字符为单位(16位),只能读写文本数据
  • 按功能
    • 节点流:具有实际传输数据的读写功能。
    • 过滤流:在节点流的基础之上增强功能。
  • 按方向
    • 输入流:将 存储设备 中的内容读入到 内存 中。
    • 输出流:将 内存 中的内容写入到 存储设备 中。

InputStreamReaderOutputStreamWriter,前者负责将InputStream转换为Reader,而后者负责将OutputStream转换为Writer
在这里插入图片描述

2.字节流

字节流扩展实例
2.1 InputStream的主要功能是将数据一个字节一个字节的读到内存,InputStream是一个抽象类。

  • int available() 返回当前输入流中可以读取(或跳过)的字节数量的估量值(当前输入流没有被另一个方法请求而导致阻塞)。
  • void close() 关闭当前输入流并且释放输入流占用的所有系统资源。
  • abstract int read() 从当前位置开始,从输入流中读取下一个字节的数据(若读到流的尾部,返回-1)。
  • int read(byte[] b) 从当前位置开始,从输入流中读取b.length个字节的数据存放到b中(实际读取到的数据要看输入流中的字节数,最多读取的数量就是b.length,返回值为实际读取的字节数)。
  • int read(byte[] b, int off, int len) 从当前位置开始,从输入流中读取len个字节的数据存放到b中(字节存放的位置为b[off],b[off+1],… 。实际中读取的数据可能并没有len个字节,具体看输入流中还剩余在多少数据,返回值为实际读取的字节数)。

2.2 OutputStream的主要作用是将数据一个字节一个子集的写入到文件或者网络中,OutputStream也是抽象类。

  • void close() 关闭输出流并释放该输出流占用的所有系统资源。
  • void flush() 刷新当前输出流,并将该流中缓冲的字节数据全部写入到磁盘。
  • void write(byte[] b) 将字节数组b中的数据全部写入到输出流中,要写入到磁盘需要调用flush()函数。
  • void write(byte[]b, int off, int len) 将字节数组b中的数据,从off位置开始算起,写入len个字节到输出流。
  • abstract void write(int b) 先将int转换为byte类型,然后将低位数据写入到输出流中。

3.字符流

字符流扩展实例
3.1 Reader的主要功能是将数据一个字符一个字符的读入到内存,Reader是一个抽象类。

  • abstract viud close() 关闭流,并且释放该流占用的所有系统资源。
  • int read() 从流中读取单个字符。
  • int read(char[] cbuf) 从当前位置读取cbuf.length个字符到cbuf数组中,但实际读取的字符个数取决于流中剩余字符个数,返回值为实际读取的字符个数。
  • abstract int read(char[] cbuf, int off, int len) 从当前位置开始,从输入流中读取len个字节的数据存放到b中,字节存放的位置为b[off],b[off+1],… 。实际中读取的数据可能并没有len个字节,具体看输入流中还剩余在多少数据,返回值为实际读取的字节数。

3.2 Writer的主要功能是将数据一个字符一个字符的写入到文件或者网络中,Writer也是抽象类。

  • Writer append(char c) 追加字符c到Writer流中,追加到尾部。返回值为追加后的此Writer。
  • Writer append(CharSequence csq)追加字符序列csq到Writer流中,追加到尾部,返回值为追加后的此Writer。
  • Writer append(CharSequence csq,int start,int end) 追加字符序列csq的子序列到Writer流中,追加到尾部,返回值为追加后的此序列。
  • abstract void close() 关闭流,在关闭之前会先调用flush()
  • abstract void flush() 刷新流,并将已经在流中的数据写入到磁盘指定位置。
  • void write(char[] cbuf)将字符数组写入到流中。
  • abstract void write(char[] cbuf, int off, int len)将字符数组cbuf中的指定部分写入到流中,从off开始,写入len个字符。
  • void write(int c) 取int型的低16位组成一个字符,然后将这个字符写入到流中,忽略高16位数据。
  • void write(String str)将字符串写入到流中。
  • void Write(String str, int off, int len) 将字符串·str·指定位置的子串写入到流中,子串起始位置为off,子串长度为len。

4.File类

代表物理盘符中的-一个文件或者文件夹。

  • createNewFile() 创建一个新文件
  • mkdir() 创建一 个新目录
  • delete() 删除文件或空目录
  • exists() 判断File对象所对象所代表的对象是否存在
  • getAbsolutePath() 获取文件的绝对路径
  • getName() 取得名字
  • getParent() 获取文件/目录所在的目录
  • isDirectory() 是否是 目录
  • isFile() 是否是文件
  • length() 获得文件的长度
  • listFiles() 列出目录中的所有内容
  • renameTo() 修改文件名

5.FileFilter接口

public interface FileFilter

  • boolean accept (File pathname) 当调用File类中的listFiles()方法时,支持传入FileFilter接口接口实现类,对获取文件进行过滤,只有满足条件的文件的才可出现在listFiles()的返回值中。
import java.io.File;
import java.io.FileFilter;
import java.util.Date;

/**
 * @author Nigori
 * @date 2020/8/8
 **/
public class FileDemo {
    public static void main(String[] args) throws Exception {
        separator();
        fileOpe();
        directoryOpe();
    }

    //分隔符
    public static void separator() {
        System.out.println("路径分隔符:" + File.pathSeparator);
        System.out.println("反斜杠分隔符:" + File.separator);
    }
    //文件操作
    public static void fileOpe() throws Exception {
        //1.创建文件
        File file = new File("IOStreamTest/filedemo.txt");      //此时还没有创建
        if (!file.exists()) {
            boolean bo = file.createNewFile();
            System.out.println("创建是否成功? " + bo);
        }

        /*//2.删除文件
        //2.1直接删除
        //System.out.println("删除结果:" + file.delete());

        //2.2JVM退出时删除
        file.deleteOnExit();
        Thread.sleep(5000);*/

        //3.获取文件信息
        System.out.println("获取文件的绝对路径:" + file.getAbsolutePath());
        System.out.println("获取路径:" + file.getPath());
        System.out.println("获取文件名称:" + file.getName());
        System.out.println("获取父目录:" + file.getParent());
        System.out.println("获取文件长度:" + file.length());
        System.out.println("文件创建时间:" + new Date(file.lastModified()).toLocaleString());

        //4.判断
        System.out.println("是否可写:" + file.canWrite());
        System.out.println("是否是文件:" + file.isFile());
        System.out.println("是否隐藏:" + file.isHidden());
    }
    //文件夹操作
    public static void directoryOpe() throws Exception {
        //1.创建文件
        File dir = new File("IOStreamTest\\directory\\dirtest");      //此时还没有创建
        if (!dir.exists()) {
            //dir.mkdir();      //创建单级目录
            boolean bo = dir.mkdirs();
            System.out.println("文件夹创建是否成功? " + bo);        //创建多级目录
        }

        /*//2.删除文件夹
        //2.1直接删除(删除的是空目录)
        //System.out.println("文件夹删除结果:" + dir.delete());

        //2.2JVM退出时删除(删除的是空目录)
        dir.deleteOnExit();
        Thread.sleep(5000);*/

        //3.获取文件信息
        System.out.println("获取文件的绝对路径:" + dir.getAbsolutePath());
        System.out.println("获取路径:" + dir.getPath());
        System.out.println("获取文件名称:" + dir.getName());
        System.out.println("获取父目录:" + dir.getParent());
        System.out.println("文件创建时间:" + new Date(dir.lastModified()).toLocaleString());

        //4.判断
        System.out.println("是否是文件夹:" + dir.isDirectory());
        System.out.println("是否隐藏:" + dir.isHidden());

        //5.遍历文件夹
        File fileList_1 = new File("IOStreamTest\\picture");
        String[] files = fileList_1.list();
        for (String str:files) {
            System.out.println(str);
        }

        //FileFilter接口的使用
        File[] fileList_2 = fileList_1.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                if (pathname.getName().endsWith(".jpg")) {
                    return true;
                }
                return false;
            }
        });
        for (File file_jpg:fileList_2) {
            System.out.println(file_jpg.getName());
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值