异常和IO字节流
异常和IO字节流
1、异常
1.1、超类Throwable
A、Error--出现的错误我们搞软件开发的无法处理
B、Exception
1.2、Exception
A、RuntimeException
(a)、运行时间的异常
例如:
int a = 10;
int b = 0;
System.out.println(a/b);
B、非RuntimeException
(a)、编译时期的异常
例如:
//编译时期的异常
private static void exeptionMethod_01() throws ParseException {
String time = "1990-01-01";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = format.parse(time);
}
1.3、异常JVM默认的处理方式
A、错误的类
B、错误的信息
C、错误的位置
1.4、使用try...catch
A、ty{
有可能出现问题的代码
}catch(错误的类 类的变量名){
对错误的处理方式
}
B、使用类的变量名调用 printStackTrace 方法,打印错误信息
C、使用try处理之后 就算出现错误,代码也不会停止运行
D、一般情况下,处理方式会弹出一个友好的提示页面
1.5、throws
A、如果我们自己写的方法上抛出了编译时期的异常,那么这个异常谁调用谁处理
B、运行时期的异常如果抛出了异常,那么调用者可以不用处理。
1.6、异常处理
A、运行时期的异常
(a)、继承自RuntimeException--try...catch抓异常
(b)、编写代码的时候没有错误信息。运行时会出现的问题
B、编译时期的异常
(a)、没有继承RuntimeException--抛异常和抓异常
(b)、写代码的时候,就会给你提示错误。这时候我们就需要进行处理,否则,代码无法编译通过。
1.7、注意
A、错误信息与我们抓的错误信息要一致
B、try...catch
(a)、可以有多个catch抓不同异常
(b)、如果有一个异常抓的是父类异常,那么他下面的子类异常将无法运行到,会报错
(c)、例如
public static void main(String[] args) {
exeptionMethod_01();
System.out.println("--------");
}
//编译时期的异常
private static void exeptionMethod_01() {
String time = "1990-01-01";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
format = null;
Date date = format.parse(time);
System.out.println(date);
}catch (ParseException e) {
System.out.println("解析错误");
}catch(Exception e){
System.out.println("空指针异常");
}
}
2、File
2.1、构造方法
A、File(String pathname) --通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
B、File(String parent, String child)--根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
C、File(File parent, String child)--根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
2.2、创建的方法
A、创建文件
(a)、createNewFile
(b)、如果文件不存在并且创建成功返回一个true
(c)、如果文件存在则返回一个true
B、创建文件夹
(a)、mkdir--创建文件夹
(b)、mkdirs--创建多级文件夹
2.3、删除
A、Delete
注意:这个删除功能不走垃圾回收站
2.4、获取
A、public String getAbsolutePath():获取绝对路径
B、public String getPath():将创建File时的路径以字符串的形式返回
C、public String getName():获取名称
2.5、判断功能
A、public boolean isDirectory():判断是否是目录
B、public boolean isFile():判断是否是文件
C、public boolean exists():判断是否存在
3、IO字节流
3.1、字节流
(1)、字节输入流
A、InputStream-->FileInputStream
(a)、一次读取一个字节
//给的路径必须要存在,因为FileInputStream本身并没有创建文件的功能
FileInputStream fos = new FileInputStream("a.txt");
int by;
while((by = fos.read()) != -1){
/*
* fos.read()读取
* 读取之后的结果赋值给by
* 最后拿by跟-1比较,看条件是否成立
*/
System.out.print((char)(by));
}
fos.close();
}
(b)、一次读取一个字节数组
FileInputStream fos = new FileInputStream("ExeptionDemo.java");
byte[] bys = new byte[1024];
int len;//每次读取的长度
while((len = fos.read(bys)) != -1){
System.out.print(new String(bys, 0, len));
}
fos.close();
}
(2)、字节输出流
A、OutputStream-->FileOutputStream
(3)、读写文本文件
//封装数据源
FileInputStream fis = new FileInputStream("d:\\mn.jpg");
//封装目的地
FileOutputStream fos = new FileOutputStream("mn.jpg");
//读写数据
//方式1:一次读取一个字节,一次写一个字节(自己练习)
//方式2:一次读取一个字节数组,一次写一个字节数组的一部分
byte[] bys = new byte[1024];
int len;
while((len=fis.read(bys))!=-1) {
fos.write(bys,0,len);
}
//释放资源
fos.close();
fis.close();
(4)、读写图片文件
//封装数据源
FileInputStream fis = new FileInputStream("d:\\窗里窗外.txt");
//封装目的地
FileOutputStream fos = new FileOutputStream("林青霞.txt");
//读写数据
//方式1:一次读取一个字节
// int by;
// while((by=fis.read())!=-1) {
// fos.write(by);
// }
//方式2:一次读取一个字节数组
byte[] bys = new byte[1024];
int len;
while((len=fis.read(bys))!=-1) {
fos.write(bys, 0, len);
}
//释放资源
fos.close();
fis.close();
3.2、字符流
A、字符输入流--Reader
B、字符输出流--Writer
注意:所说的输入输出是指相对于java程序