异常
===============================
* 封装错误信息的对象
错误信息:
1)类型名称
2)提示消息
3)行号
* 异常继承结构
Throwable
|- Error 系统级错误
|- Exception 可修复的错误
|- 其他Exception
|- RuntimeException
|- NullPointerException
|- ArrayIndexOutOfBoundsException
|- NumberFormatException
|- ArithmeticException
|- ClassCastException
...
* 捕获异常
try {
} catch(AException e) {
} catch(BException e) {
} catch(父类型Exception e) {
}
* throws
添加异常抛出管道
*)方法上存在默认管道,类型 RuntimeException
*)RuntimeException 及其子类型异常,
都能从默认管道抛出
*)没有抛出管道,必须捕获
* throw
手动抛出异常
* 异常包装
捕获的异常对象,
包装在另一种异常对象中,
再抛出
*)不能抛出的异常,包装成能抛出的异常
*)多种异常类型,统一包装成一种类型
* 自定义异常
定义新的异常类型,
来表示具体业务中的错误情况
ZhuanZhangShiBaiException
UsernameNotFoundException
WrongPasswordException
io
===============================
* Input / Output
输入 / 输出
* java.io 包
File
RandomAccessFile
InputStream / OutputStream
FileInputStream / FileOutputStream
BufferedInputStream / BufferedOutputStream
DataInputStream / DataOutputStream
PrintStream
ByteArrayInputStream / ByteArrayOutputStream
ObjectInputStream / ObjectOutputStream
Reader / Writer
InputStreamReader / OutputStreamWriter
FileReader / FileWriter
BufferedReader / BufferedWriter
PrintWriter
File
==========================================
* 封装磁盘路径字符串
* 可以封装文件路径,
也可以封装目录路径
* 可以封装不存在的路径
创建对象
-----------------------------------
1.File f = new File("d:/abc/a.jpg");
2.File f = new File("d:/abc/", "a.jpg");
方法
-----------------------------------
*) 文件或目录的属性
canRead()
canWrite()
canExecute()
是否可读可写可执行
isHidden() 是否隐藏文件
exists() 表示的路径是否存在
getAbsolutePath() 完整路径
getName() 文件名
getParent() 父目录
lastModified() 最后修改时间,毫秒值
length() 文件字节量,对目录无效
isDirectory() 是否文件夹
isFile() 是否文件
getTotalSpace() 空间总大小
getFreeSpace() 可用空间
*) 文件或目录操作
createNewFile() 创建文件
delete() 删除文件或“空目录”
mkdir() 创建单层目录
mkdirs() 创建多层目录
renameTo() 改名、移动
*) 创建删除重命名方法返回 boolean,表示操作是否成功
File.createTempFile(前缀, 后缀) 在系统临时目录创建临时文件
*) 文件列表
list() 返回 String[],包含子文件、子目录名称
listFiles() 返回 File[],包含子文件、子目录的 File 对象
list(FilenameFilter)
listFiles(FilenameFilter)
listFiles(FileFilter)
只列出符合过滤条件的文件、目录,
参数: 外接的过滤器
RandomAccessFile
===============================================
* 用来读写文件
* 将文件中的字节数据,
当做数组,用下标访问字节值
创建对象
---------------------------------------
RandomAccessFile raf =
new RandomAccessFile(文件, "r");
RandomAccessFile raf =
new RandomAccessFile(文件, "rw");
方法
---------------------------------------
write(int b)
int四个字节中,只输出末尾的一个字节
[1][2][3][4] --> [4]
write(byte[] buff)
输出数组中全部字节值
write(byte[] buff,int from,int length)
输出数组中从 from 开始的 length 个
read()
读取下标位置的一个字节值,
再补3个0字节,转成 int
[4] --> [1][2][3][4]
读取结束,再读取,返回 -1
read(byte[] buff)
按数组容量读取一批字节值放入数组
返回这一批的字节数量
读取结束,再读取,返回 -1
seek(int position)
定位下标到指定位置
getFilePointer()
获得当前下标所在的位置
writeInt(int i) 输出int的四个字节
writeDouble(double d) 输出double的八个字节
...
writeUTF(String s)
先输出两个字节表示字符串的字节长度
再输出字符串的这些字节值
readInt() 读取四个字节转成int
readDouble() 读取八个字节转成double
...
readUTF()
先读取两个字节来确定字符串的字节长度,
再读取这些字节转成 String
*)读取结束再读取,
会出现异常 EOFException
EOF - End Of File
流 Stream
=========================================
* 将字节数据读写,抽象成数组在管道中流动
* 单向流动,
输入流只能用来读取数据;
输出流只能用来输出数据.
* 顺序从头到尾流动,
不能跳转
InputStream / OutputStream
=========================================
* 字节流的抽象父类
方法
--------------------------------------
OutputStream
--------------------------------
write(int b)
write(byte[] buff)
write(byte[] buff,int from,int length)
flush() 刷出缓存数据
InputStream
--------------------------------
read()
read(byte[] buff)
available() 剩余的可读取字节量
FileInputStream / FileOutputStream
========================================
* 直接与文件相接,
读写文件中的字节数据
创建对象
---------------------------------
1.FileOutputStream out =
new FileOutputStream(文件路径);
不管文件是否存在,
都会新建空文件
2.FileOutputStream out =
new FileOutputStream(文件路径, true);
如果文件不存在,新建;
如果文件已经存在,追加。
练习
============================================
1.
求目录总大小
|- b
|- c
|-
|- d
|- f
|-
|- h
|- i
2.
文件加密、解密
3.
BMP 图片
前 54 个字节是 bmp 格式信息
第 19 到 22 四个字节,是图片宽度值
第 23 到 26 四个字节,是图片高度值
4.
文件复制