I/O流
输入输出流,用来进行设备之间的一个数据传输
一.异常
1.概述
据在传输的时候,有可能会出现一些问题,对于这些问题的处理,java提供了一套异常处理机制,可以让我们正确处理异常
2.种类
Throwable:异常或错的异常,异常的基类
Error :错误严重性问题 解决不了
Exception :异常,一般问题,可以解决
运行期异常:
RtimeException及其子类,可以解决也可以不解决(如果不解决,交给jvm处理)
编译期异常:
非RtimeException及其子类,必须解决
3.运行期异常
当出现异常的运算条件时,抛出异常,当我们没有处理这个运行期异常时,那么就由JVM处理,打印该异常的信息,然后程序不再运行,退出虚拟机
try{//放置有可能出现问题的代码,一旦try出现该种异常,那么相应的catch就会执行
//没有出现异常就不会进入catch
//注意:一旦进入catch后就不再执行try中异常之后的代码
System.out.println(a/b);
}catch(ArithmaticException){
System.out.println(“除数为0的异常”);
}
catch(Exception e){
System.out.println(“未知异常”);
e.printStackTrace();//打印异常的堆栈信息
}
finally{//一般可以不写
//不管try里面有没有遇到异常,它里面的代码必须执行
//这里一般会做一些善后工作,比如释放资源
}
注意事项:
能明确的异常尽量明确,多个异常如果是平级关系,在前在后没关系;
如果多个异常存在继承关系,父类异常要放在后面;
catch内部不能做空处理,可以写一些简单的输出语句。
4.编译期异常
(1)概述:
发生在编译期间,必须要进行处理。
(2)处理方式:
1.将异常抛给调用者,谁调用谁处理,在调用方法后加throws parseException,简称“甩锅”。
一般在main方法里就不再抛出,自己进行捕获处理
2.自己捕获处理:用try catch进行处理;
代码如下:
parseException//解析时出现意外或错误
throws//抛给调用者去处理,在方法声明后,后面跟的是异常类名,有可能会发生
throw//在方法内部,抛出一个异常对象,已知一定会发生
if(){
//内部为自定义的条件
}else{throw new ArithmaticException("除数为0");}
5.自定义异常
public class 自定义类名Exception extends RuntimeException{
public 自定义类名Exception(string a) { //"a"为自定义名字
super(a);
}
}
注意
1.子类在重写父类方法时,父类方法没有抛出异常,子类不能抛出
2.子类不能抛出父类没有抛出过的异常,但是可以抛出和父类一样或比父类小的异常
二.file
1.概述
File是文件和目录的抽象表现形式,通常使用File来封装一个文件或文件夹
用户界面和操作系统使用与系统相关的路径名字符串 来命名文件和目录。此类呈现分层路径名的一个抽象的、与系统无关的视图。抽象路径名 有两个组件:
1.一个可选的与系统有关的前缀 字符串,比如盘符,"/" 表示 UNIX 中的根目录,"\\" 表示 Microsoft Windows UNC 路径名。
2.零个或更多字符串名称 的序列。
File file = new File("C:\\user\\wenjian.txt");
//通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
2.路径分类
(1)绝对路径:带有盘符号的详细路径
File file2 =new File ("E:\\a.txt");//封装一个文件,操作前必备
(2)相对路径:不带盘符号的路径
File file2 =new File ("b.txt");//该路径在java这个项目的根路径下
路径符号介绍
./:当前路径
…/:上一级路径
…/…/:上俩级路径
3.功能及用法
(1)封装文件的俩种方法
(1)File(String parent, String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File file2 =new File ("E:\\,a.txt");//一个父路径,一个子路径
(2)File(File parent, String child)
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例
File file3 =new File ("E:\\");//父路径是个File形式
File file4 =new File (file3 ,"a.txt");
(2).创建文件或目录
boolean newFile = file2.creatNewFile();//创建文件,返回值表示该文件是否创建成功,第一次创建成功返回true,重复创建返回false
boolean b = file2.mkdir();//创建单级目录
boolean b1= file2.mkdirs();//创建多级目录
(3).删除文件或目录
a.删除空目录或文件
boolean b = file2.delete();//删除文件或目录,只能删除空目录,注意不走回收站,返回值表示文件是否删除成功
b.删除非空目录(采用递归)
public static void main(String[] args) {
File file = new File("12345");
swj(file);
}
private static void swj(File file) {
File[] files = file.listFiles();
for (File file2 : files) {
boolean b1 = file2.delete();
if (!b1) {
swj(file2);
}
}file.delete();
}
(4).重命名文件或目录
File file1 =new File ("a.txt");
File file2 =new File ("b.txt");//和源文件同一目录下没有你封装的这个文件才可重命名
//如果同一目录下有b.txt,删除后才可以重命名
file1.renameTo(file2);//当你源文件和你传入的这个文件在同一个目录下,那么就重命名
(5)剪切功能
当你源文件和你传入的这个文件不在同一个目录下
public static void main(String[] args) {
File file = new File("D:\\yl\\7.20\\20190720-File2-下午\\wenjian\\123.txt");
File file1 = new File("123.txt");//将file文件剪切到file1定义的路径
boolean b = file.renameTo(file1);
System.out.println(b); //返回true
}
(6).判断功能
file.isFile();//判断是否是文件
file.isDirectory();//判断是否是目录
file.exists//判断文件或目录是否存在
file.canRead();//判断是否可读
file.canWrite();//判断是否可写
file.isHidden();//判断是否隐藏
file.canExecute();//判断是否可执行
file.isAbsolute();//判断文件是否是绝对路径
(6).获取功能
file.getname();//获取文件或目录的名称
file.length();//获取文件的长度
file.getAbsolutePath();//获取他的绝对路径返回字符串形式
file.getAbsoluteFile();//获取他的绝对路径返回文件形式,比较灵活
file.getPath();//获取相对路径
file.getParentFile();//获取该文件的父路径,返回file表现形式
file.getTotalSpace();//获取盘符大小空间单位是字节
file.getFreeSpace();//获取盘符剩余空间
file.lastModified();//获取文件最后一次修改时间
(7).过滤器
file.list();//获取该目录下所有的文件或文件夹的名称,不太灵活
file.listFiles();//获取该目录下所有的文件或文件夹的file形式数组
file.listFiles()用法演示
File file2 = new File("wenjian");
File[] files = file2.listFiles();
for (File file3 : files) {
System.out.println(file3);