IO流、异常、File文件

异常

异常就是程序在运行时出现的错误
可以分为三类 异常的基类: Throwable、严重问题: Error 、非严重问题: Exception,其中非常严重的异常又分为编译时异常和运行时异常。
编译时异常: 在编译时就显示错误,如果不修改就将无法通过编译
运行时异常: 编译时不报错,但是在运行时会出现错误。

JVM对异常的处理

当主函数遇到问题时,要么自己处理异常继续运行,要么自己没有该异常的处理方式,交由主函数的JVM来处理。
JVM有一个默认的处理方式,就是将该异常进行处理,然后将异常的信息出现的在程序的哪一位置打印在控制台上,然后同时停止主函数的运行。

异常的处理方式

1. try…catch…finally:
其格式为try {
可能出现问题的代码 ;
}catch(异常名 变量名){
针对问题的处理 ;
}finally{
释放资源;
}
2. throws:直接抛出异常
补充:
(throws与throw的区别
throws: 用在方法声明后,跟在时异常类名,可以同时跟多个异常类名中间用逗号隔开,表示抛出异常
其表示的可能出现的异常的可能性,但并不一定会发生这些异常
throw:用在方法体内,在异常对象名,只能抛出一个异常对象名,此异常可以使编译时异常也是运行时异常,表示抛出异常,由方法体的语句处理,前者是抛出了异常,但不一定就发生这些异常,后者则是一定抛出某种异常)

finally关键字

finally的特点 : 被finally控制的语句体一定会执行,在执行到finally之前JVM退出了,则不会在执行
其主要用于释放资源
B:finally的作用: 用于释放资源,在IO流操作和数据库操作中会见到
补充:与其相近的关键字
final: 是一个状态修饰符,被修饰的变量变为常量,被修饰的类无法被继承,修饰的方法不能被子类重写
finally: 用在try…catch…语句中 ,其作用是释放资源,始终被执行
finalize: Object类中一个回收垃圾的方法

自定义异常

其存在的意义是当开发过程中会遇到某种异常,但是java没有提供相应的异常,则需要自定义一个相对应的异常来解决问题。

异常的注意事项

1.子类重写父类方法时,子类必须抛出相同的异常或父类异常的子类,子类不抛出异常也可以
2.子类只能抛出父类已有的异常,不能抛出父类没有的异常
3.父类重写的方法没有异常抛出,子类方法决不能抛出异常,若果有一场只能用try不能用throws

File

其是文件和目录路径名的表示,
其既可以表示文件,也可以表示文件目录
常用的方法有
createNewFile(); 创建一个文件,如果这个文件存在则无需创建
mkdir(); 创建一个文件夹,如果这个文件夹存在则不需要创建,其只能创建单层文件夹,如果需要创建多层文件夹,则需要mkdirs();
delete(): 删除文件或者文件夹( 如果删除的是文件夹,则次文件夹不能包含文件或文件夹)
renameTo(): 把文件重命名(如果指定路径名与原来的路径名相同则是重命名,如果不同则是剪切)
isDirectory(): 判断是否是文件夹
isFile(): 判断是否是文件
exists(): 判断是否存在
canRead(): 判断是否可读
canWrite(): 判断是否可写
isHidden(): 判断是否隐藏
isAbsolute(); 判断是否使用的是绝对路径
getAbsolutePath(): 获取绝对路径
getPath(): 获取相对路径

IO流

就是处理设备之间数据的传输
IO流的分类
按方向分为 输出流和输出流
按数据类型分为 字节流: InputStream 用来读 OutputStream用来写
字符流: Reader 用来读 Writer用来写
FileOutputStream是OutputStream的子类
用来写出数据
write(int b):写一个字节 超过一个字节 砍掉前面的字节
write(byte[] b):写一个字节数组
write(byte[] b,int off,int len):写一个字节数组的一部分
Windows的换行符为 : \r\n


FileInputStream是InputStream的子类
用来读取数据
read():一次读取一个字节, 如果没有数据返回的就是-1
当文件内容过大时可用通过字节数组来读写数据:

read(byte[] b) : 一次读取一个字节数组,返回的int类型的值表示的意思是读取到的字节的个数,如果没有数据了就返回-1


BufferedOutputStream写出数据
其是创建出一个缓冲区,将数据写入缓冲区,再从次缓冲区中读取相关数据


字符流
字符流出现的原因:由于字节流操作中文不是特别方便,所以,java就提供了字符流。
String类型的编解码
是将string类型转换成字符数组,读入文件内,将字符数组转换成string类型,将数据读出。


OutputStreamWriter
write(int c) – 写一个字符
write(char[] cbuf) – 写一个字符数组
write(char[] cbuf,int off,int len) – 写一个字符数组的 一部分
write(String str) – 写一个字符串
write(String str,int off,int len) – 写一个字符串的一部分


InputStreamReader
read() 一次读取一个字符
read(char[] cbuf) 一次读取一个字符数组 如果没有读到 返回-1

OutputStreamWriter 和 InputStreamReader前者是字符流写入字节流的桥梁 用指定的 charset 将要写入流中的字符编码成字节,
后者是字节流写入字符流的桥梁用指定的 charset 读取字节并将其解码为字符


BufferedWriter写出数据 高效的字符输出流
BufferedReader读取数据 高效的字符输入流
newLine():根据系统来决定换行符 具有系统兼容性的换行符
readLine():一次读取一行数据 是以换行符为标记的 读到换行符就换行 没读到数据返回null

数据输入输出流

数据输入流: DataInputStream
数据输出流: DataOutputStream
可以写基本数据类型,可以读取基本数据类型
其特点是按照什么顺序存入数据,读取时的顺序就是什么顺序

内存操作流

其特点是不操作文件,只操作文件内的数据
其中
ByteArrayOutputStream ByteArrayInputStream 用来操作字节数组
CharArrayWrite CharArrayReader 用来操作字符数组
StringWriter StringReader 用来操作字符串

打印流

打印流只能操作目的地,不能操作数据源(不能进行读取数据)
可以操作任意数据类型的数据 调用print() 方法可以写任意数据类型
可以实现自动刷新和换行

随机访问流

RandomAccessFile概述 最大特点 能读能写
RandomAccessFile类不属于流,是Object类的子类。但它融合了InputStream和OutputStream的功能。
支持对随机访问文件的读取和写入。
RandomAccessFile的父类是Object , 这个流对象可以用来读取数据也可以用来写数据.可以操作任意数据类型的数据.
我们可以通过getFilePointer方法获取文件指针,并且可以通过seek方法设置文件指针
最大的特点,一个人 自己能读能写,他还有文件指针,可以记录,读取文件字节的位置
其可用来断点下载,就是下载到一半后停止下载,等下次重新下载是从上一次停止时的位置开始下载。

序列化流和反序列化流

序列化:就是将对象存储到文件中.(此对象 要重写Serializable 接口才能被序列化)
反序列化: 就是把文件中存储的对象读出来。
但是当类的成员变量被transient 修饰时,该变量就不会被序列化

Properties

Properties 类表示了一个持久的属性集。
Properties 可保存在流中或从流中加载。
属性列表中每个键及其对应值都是一个字符串。
Properties父类是Hashtable
常用的方法
load(Reader reader) 按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。
load(InputStream inStream) 从输入流中读取属性列表(键和元素对)。
store(OutputStream out,String comments) 以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。
store(Writer writer,String comments) 以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符。

SequenceInputStream

表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值