[Java]Day9:IO流 字节流 字符流 Properties集合

File类

  • File类
    • 文件和目录路径名的抽象表示
    • 文件和目录是可以通过File封装成对象的
    • 对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已,它可以是存在的,也可以是不存在的,将来是要通过具体的操作把这个路径的内容转换为具体存在的
  • File类构造方法
方法名说明
File(String pathname)通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例
File(String parent, String child)从父路径名字符串和子路径名字符串创建新的 File实例
File(File parent, String child)从父抽象路径名和子路径名字符串创建新的 File实例
  • File类创建功能
方法名说明
public boolean createNewFile()当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件
public boolean mkdir()创建由此抽象路径名命名的目录
public boolean mkdirs()创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录
  • File类删除功能
方法名说明
public boolean delete()删除由此抽象路径名表示的文件或目录
  • File类判断功能
方法名说明
public boolean isDirectory()测试此抽象路径名表示的File是否为目录
public boolean isFile()测试此抽象路径名表示的File是否为文件
public boolean exists()测试此抽象路径名表示的File是否存在
  • File类获取功能
方法名说明
public String getAbsolutePath()返回此抽象路径名的绝对路径名字符串
public String getPath()将此抽象路径名转换为路径名字符串
public String getName()返回由此抽象路径名表示的文件或目录的名称
public File[] listFiles()返回此抽象路径名表示的目录中的文件和目录的File对象数组

字节流

  • IO流
    • IO:输入(Input)输出:(Output)
    • 流:是一种抽象概念,是对数据传输的总称,也就是说数据在设备间的传输称为流,本质是数据传输
    • IO流是用来处理设备间数据传输的问题,如:文件复制,上传,下载
  • IO流分类
    • 按照数据流向
      • 输入流:读取数据
      • 输出流:写入数据
    • 按照数据类型
      • 字节流
        • 字节输入流
        • 字节输出流
      • 字符流
        • 字符输入流
        • 字符输出流
  • IO流使用场景
    • 操作纯文本文件,优先使用字符流
    • 操作图片,视频,音频等二进制文件,优先使用字节流
    • 不确定文件类型,使用字节流(万能流)

字节流写数据

  • 字节流抽象基类
    • InputStream: 这个抽象类是表示字节输入流的所有类的超类
    • OutputStream: 这个抽象类表示字节流输出的所有类的超类
    • 子类名特点: 子类名称都是以父类名作为子类名的后缀
  • 字节输出流
    • FileOutputStream(String name) :创建文件输出流以指定的名称写入文件
  • 使用字节输出流写数据的步骤
    • 创建字符输出流对象(调用系统功能创建文件,创建字节输出流对象,让字节输出流对象指向文件)
      • FileOutputStream fos = new FileOutputStream(文件路径)
    • 调用字节输出流对象的写数据方法 fos.write( );
    • 释放资源 fos.close();
  • 写数据的方法分类
方法名说明
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
    • 字节流写数据如何实现追加写入
      • Public FileOutputStream(String name,boolean append)
      • 创建文件输出流以指定名称写入文件,如果第二个参数为true,则字节将写入文件的末尾而不是开头
  • 字节流写数据加异常处理
    • 异常处理格式
      • try-catch-finally
      • finally特点
        • 被finally控制语句一定会执行,除非JVM退出

字节流读数据

  • 字节输入流
    • FileInputStream(String name):通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件系统中的路径名name命名
  • 字节输入流读取数据步骤
    • 创建字节输入流对象
    • 调用字节输入流对象的读数据方法
    • 释放资源
  • 字节流读数据
    • 一次读一个字节数组的方法
      • public int read(byte[]b):从输入流读取最多b.length个字节的数据
      • 返回的是读入缓冲区总字节数,也就是实际的读取字节个数
  • 字节流复制文件
    • 创建字节输入流对象
    • 创建字节输出流对象
    • 读写数据,复制图片
    • 释放资源

字节缓冲流

  • 字节缓冲流
    • IBufferOutputStream: 该类实现缓冲输出流,通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用
    • IBufferedInputStream:创建BufferedInputStream将创建一个内部缓冲区数组,当从流中读取或者跳过字节时,内部缓冲区将根据需要从所含的输入流中重新填充一次很多字节
  • 构造方法
方法名说明
BufferedOutputStream(OutputStream out)创建字节缓冲输出流对象
BufferedInputStream(InputStream in)创建字节缓冲输入流对象
  • 字节缓冲流复制视频
    • 根据数据源创建字节输入流对象
    • 根据目的地创建字节输出流对象
    • 读写数据,复制视频
    • 释放资源
//字节缓冲流一次读写一个字节数组
 BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\itcast\\字节流复制图片.avi"));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myByteStream\\字节流复制图片.avi"));

        byte[] bys = new byte[1024];
        int len;
        while ((len=bis.read(bys))!=-1) {
            bos.write(bys,0,len);
        }

        bos.close();
        bis.close();
    }
//字节缓冲流一次读写一个字节
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\itcast\\字节流复制图片.avi"));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myByteStream\\字节流复制图片.avi"));
        int by;
        while ((by=bis.read())!=-1) {
            bos.write(by);
        }

        bos.close();
        bis.close();
    }

字符流

  • 字符流的介绍

由于字节流操作中文不是特别的方便,所以Java就提供字符流

字符流 = 字节流 + 编码表

字符串中编码解码问题

  • 相关办法
方法名说明
byte[] getBytes()使用平台的默认字符集将该 String编码为一系列字节
byte[] getBytes(String charsetName)使用指定的字符集将该 String编码为一系列字节
String(byte[] bytes)使用平台的默认字符集解码指定的字节数组来创建字符串
String(byte[] bytes, String charsetName)通过指定的字符集解码指定的字节数组来创建字符串

字符流写数据

  • Writer: 用于写入字符流的抽象父类
  • FileWriter: 用于写入字符流常用子类
  • 构造方法
方法名说明
FileWriter(File file)根据给定的 File 对象构造一个 FileWriter 对象
FileWriter(File file, boolean append)根据给定的 File 对象构造一个 FileWriter 对象
FileWriter(String fileName)根据给定的文件名构造一个 FileWriter 对象
FileWriter(String fileName, boolean append)根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象
  • 成员方法
方法名说明
void write(int c)写一个字符
void write(char[] cbuf)写入一个字符数组
void write(char[] cbuf, int off, int len)写入字符数组的一部分
void write(String str)写一个字符串
void write(String str, int off, int len)写一个字符串的一部分
  • 刷新和关闭的方法
方法名说明
flush()刷新流,之后还可以继续写数据
close()关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据

字符流读写数据

  • Reader:用于读取字符流的抽象父类

  • FileReader用于读取字符流的常用子类

  • 构造方法

    方法名说明
    FileReader(File file)在给定从中读取数据的 File 的情况下创建一个新 FileReader
    FileReader(String fileName)在给定从中读取数据的文件名的情况下创建一个新 FileReader
  • 成员方法

方法名说明
int read()一次读一个字符数据
int read(char[] cbuf)一次读一个字符数组数据

字符缓冲流

  • 字符缓冲流介绍
    • BufferedWriter:将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入,可以指定缓冲区大小,或者可以接受默认大小。默认值足够大,可用于大多数用途
    • BufferedReader:从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取,可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途
  • 构造方法
方法名说明
BufferedWriter(Writer out)创建字符缓冲输出流对象
BufferedReader(Reader in)创建字符缓冲输入流对象
  • 字符缓冲流特有功能
    • 方法介绍

BufferedWriter:

方法名说明
void newLine()写一行行分隔符,行分隔符字符串由系统属性定义

BufferedReader:

方法名说明
String readLine()读一行文字。 结果包含行的内容的字符串,不包括任何行终止字符如果流的结尾已经到达,则为null

Properties集合

  • Properties作为Map集合的使用
    • 是一个Map体系的集合类
    • Properties可以保存到流中或从流中加载
    • 属性列表中的每个键及其对应的值都是一个字符串
  • Properties作为Map集合的特有方法
方法名说明
Object setProperty(String key, String value)设置集合的键和值,都是String类型,底层调用 Hashtable方法 put
String getProperty(String key)使用此属性列表中指定的键搜索属性
Set stringPropertyNames()从该属性列表中返回一个不可修改的键集,其中键及其对应的值是字符串
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值