(文件,IO流)2020.10.30-11.2


代码示例: 文件的读写,复制,类型统计等操作.

File

java.io包

用来封装文件或目录路径的信息的对象。注意:不能操作文件中的数据。
路径:
  绝对路径:就是一个完整的路径
       Windows: 带有磁盘名的路径就是绝对路径
  相对路径:指的是相当于某一个路径来找,
       相对的路径不同,找的内容也会不同。

构造方法

在这里插入图片描述

在这里插入图片描述

方法

创建方法

在这里插入图片描述

删除方法

在这里插入图片描述
在这里插入图片描述

获取方法

在这里插入图片描述

判断方法

在这里插入图片描述

重命名

在这里插入图片描述

列出方法

在这里插入图片描述
 可以对指定目录下的所有内容进行格式过滤:

文件名过滤器 FilenameFilter

文件名过滤器
  accept(File dir, String name):
      dir:指定的目录; name : 指定目录下的内容名
      根据该方法的返回值是true还是false,绝对是否过滤
在这里插入图片描述

文件对象过滤器 FileFilter

文件对象过滤器
  accept(File pathName):
      pathName:指定目录下的每个内容的绝对路径值
      根据该方法的返回值是true还是false,绝对是否过滤
在这里插入图片描述

IO技术

I:input 输入; O:output 输出; 输入输出技术。
流:stream,可以理解是为数据。
输入:站在内存的角度看,数据流入内存的。
输出:站在内存的角度看,数据从内存中流走的。
分类:
 按照流的方向分为:输入流和输出流
 按照操作的数据分为: 字节流和字符流
 字节流: 图片、视频、音频等文件
 字符流: 纯文本文件(记事本打开的)
 
IO流架构:
 字节流
  根类 抽象类
    InputStream 输入流
        实现类子类: FileOutputStream
    OutputStream 输出流
        实现类子类: FileInputStream
 字节缓冲流
    BufferedInputStream
    BufferedOutputStream
 字符流
  根类 抽象类
    Reader
       实现类子类:FileReader
    Writer
       实现类子类:FileWriter
 字符缓冲流
    BufferedWrite
    BufferedReader
 转换流
   InputStreamReader:转换输入流
   OutputStreamWriter:转换输出流

字节流

根类:
  InputStream 输入流  OutputStream 输出流
  这两个对象都是抽象类,因此不能创建对象。
输出
  OutputStream:
     write(int by) : 写入一个字节数据
     write(byte[] by) :将by中的数据全部写入
     write(byte[] by, int index, int len) :将by中的一部分数据写到目的地
     close():关闭输出流
     flush():刷新数据到目的地
  子类: FileOutputStream
    构造方法:
       FileOutputStream(File 文件名) 会覆盖文件
       FileOutputStream(String 文件名)
       FileOutputStream(File 文件名,boolean true) 不覆盖文件,追加数据
       FileOutputStream(String 文件名,boolean true)
在这里插入图片描述
输入
  InputStream:
    read(): 读取一个字节数,末尾返回-1
    read(byte[] by) : 将读取的内容存到by中,返回读取的字节数,末尾也是返回-1
    read(byte[] by, int index, int len) :将读取的内容存到by中,末尾也是返回-1
    close():关闭输入流
   子类: FileInputStream
在这里插入图片描述

字节缓冲流

方法:
 int available(): 返回未被读取的字节个数
总结步骤:
 1.读
  创建输入流对象,并指定数据源
  采用一个字节或字节数组方式进行数据的读取,调用read()方法
  关闭输入流
 2.写
  创建输出流对象,并指定目的地
  调用write方法写字节数据
  关闭输出流

缓冲字节流对象
 目的:提高读写效率。
 BufferedInputStream 和 BufferedOutputStream,这对流本身不具备读写功能,所谓的调用read和write方法,实际使用的是被包装的基础流对象中的读写功能,仅仅是将读写功能加强了。
 写:调用write方法时,是将数据写到内部维护的字节数组中,一次性默认能写8192个字节数据,写满后将数据刷新到目的地;如果没写满,需手动调用flush方法将数据刷新到目的地。
   flush():仅仅是将数据刷新到目的地,不关闭流对象,流对象可以继续使用。
   close():关闭流对象,在关闭前会刷新数据到目的地,流对象不可以继续使用

 读:调用read方法时,会使用基础流对象从数据源最多一次性读取默认8192个字节数据,并将一个字节数据返回,第二次读取时从8192个字节数组中进行读取。

字符流

根类: Reader Writer 都是抽象类。
Writer:
  write(char[]) :将字符数组中的内容写到目的地
  write(String str) :将字符串写到目的地
  write(int ch) :将一个字符写到目的地
  write(char[], index, length)
  write(String, index , length)
  close(): 关闭流
  flush(): 刷新数据
Reader:
  int read() :读取一个字符,读到末尾返回-1
  int read(char[] ,index, length)
  int read(char[]) : 读取内容存储到字符数组中,返回的时读取的字符个数,末尾返回-1
  close(): 关闭流
字符流实际原理组成:字节流+编码表
注意:字符流只能操作纯文本文件,能使用记事本打开的都是纯文本
子类: FileReader FileWriter

字符缓冲流

目的:也是为了提高效率。
实现原理与字节缓冲流实现原理时雷同的,比字节缓冲流多了一个查表的步骤。
BufferedWriter:
  字符缓冲输出流
  newLine() : 跨平台的换行符
BufferedReader:
  字符缓冲输入流
  String readLine(): 读取一行文本,读到末尾返回null。
          注意:读取的一行文本中不包含行的终止符

转换流

好处: 可以使用指定的码表进行数据的读写操作;不指定码表默认走系统默认的码表。
名称为:
  InputStreamReader:转换输入流
   构造方法:
     new InputStreamReader(InputStream) : 使用默认码表,将字节转为字符 - - 读
     new InputStreamReader(InputStream ,String charSetname): 使用指定的编码 - - 读
           注意:编码表名不区分大小写,但是不能写错
  OutputStreamWriter:转换输出流
   构造方法:
     new OutputStreamWriter(OutputStream):使用默认码表,将字节转为字符 - - 写
     new OutputStreamWriter(OutputStream,String charsetname):使用指定码表 - - 写
           注意:编码表名不区分大小写,但是不能写错
注意:这对流都是字符流。
什么时候使用转换流:
  1.当读取或写入的文件数据与系统平台默认的码表不一致时,就可以使用转换流
  2.将字节流转成字符流进行操作时(使用的默认码表)

异常处理

jdk7前版本:
在这里插入图片描述
jdk7后:
  try(
    流对象的创建
  ){
    流对象的读写操作
  }catch(异常类型声明){
    异常声明
  }
在这里插入图片描述
jdk7对异常中的catch块做了处理:
在这里插入图片描述
 多个不同类型的异常,如果有相同的处理方式,可以使用 | 连接不同类型的异常

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值