异常
什么是异常
即非正常情况,通俗地说,异常就是程序出现的错误。
异常的分类
- 顶层父类: Throwable
- 子类: Error(错误,不需要我们处理)
- 子类: Exception(异常, 这个才是我们常说的异常)
异常( Exception )
合理的应用程序可能需要捕获的问题; 举例: NullPointerException
错误( Error )
合理的应用程序不应该试图捕获的问题; 举例: StackOverFlowError
异常的处理方式
JVM默认的异常处理方式
在控制台打印错误信息,并终止程序。
开发中异常的处理方式
- try..catch ( finally) : 捕获,自己处理;
try {
//尝试执行的代码
} catch(Exception e) {
//出现可能的异常之后的处理代码
} finally {
// 正常情况下一定会执行的代码,如关闭资源
}
复制代码
特点:处理完异常,程序会继续执行。
执行流程: 先执行try{}中的内容,看是否有问题(异常);
没有:直接执行finally语句中的内容;
有:跳转到catch0 ()语句中开始执行,再执行finally{)} 语句中的内容.
- throws :抛出,交给调用者处理。
public void方法名0 throws Exceptoin {
}
复制代码
特点: 执行结束后,程序不在执行。
IO流
什么是IO流
I/O ,即输入( Input )输出( Output) , IO流指的是数据像 连绵的流体一样进行传输。
IO流能干什么?
在本地磁盘和网络上操作数据。
IO流的分类
按数据流向分:
- 输入流;
- 输出流。
按操作方式分:
- 字节流:
InputStream
OutputStream
- 字符流:
Reader
Writer
IO流体系
字符流:
按字符读写数据的IO流
Reader 字符输入流的顶层抽象类
——FileReader 普通的字符输入流
——BufferedReader 高效的字符输入流(也叫:字符缓冲输入流)
Writer 字符输出流的顶层抽象类
——FileWriter 普通的字符输入流
——BufferedWriter 高效的字符输入流(也叫:字符缓冲输入流)
复制代码
字节流:
按字节读写数据的IO流
InputStream 字节输入流的顶层抽象类
FileInputStream 普通的字节输入流
BufferedInputStream 高效字节输入流
OutputStream 字节输出流的顶层抽象类
FileOutputStream 普通的字节输出流
BufferedOutputStream 高效的字节输出流
复制代码
File类
概念
文件,文件夹,一个File对象代表磁盘上的某个文件或文件夹
构造方法:
File(String pathname) 根据字符串形式的路径获取File对象.
File(String parent, String child) 根据字符串形式的父目录以及子目录创建File对象.
File(File parent, String child) 根据父目录对象,以及字符串形式的子目录来获取File对象.
复制代码
成员方法:
创建功能: 如果不存在就创建,返回true,否则就不创建,返回false.
createNewFile():创建文件
mkdir()和mkdirs()∶创建单级目录和多级目录
判断功能
isDirectory():判断File对象是否为目录
isFile():判断File对象是否为文件
exists():判断File对象是否存在
获取方法
getAbsolutePath()∶获取绝对路径
绝对路径:以盘符开头的路径.例如:D:/1.txt
getPath()∶获取文件的相对路径
相对路径:—般是相对于当前项目路径来讲的.例如: 1.txt
getName()∶获取文件名
list()∶获取指定目录下所有文件(夹)名称数组
listFiles():获取指定目录下所有文件(夹)File数组
复制代码
字符流读写文件
字符流读数据–按单个字符读取
- 创建字符流读文件对象:
Reader reader = new FileReader("readme.txt") ;
- 调用方法读取数据:
int data = reader.read() ;
读取一个字符,返回该字符代表的整数,若到达流的末尾,返回-1。
- 异常处理:
throws IOException
- 关闭资源:
reader.close();
字符流读数据-按字符数组读取
- 创建字符流读文件对象∶
Reader reader = new FileReader("readme.txt")
- 调用方法读取数据∶
char[] chs = new char[2048];int len = r.read(chs) ;
读取字符到数组中,返回读取的字符数,若到达流的末尾,返回-1
- 异常处理:
throws IOException
- 关闭资源∶
reader.close();
字符流写数据–按单个字符写入
- 创建字符流写文件对象∶
Writer writer = new FileWriter("dest.txt") ;
- 调用方法写入数据︰
int x =’中’;writer. write(x);写一个字符
- 异常处理:
throws IOException
- 关闭资源︰
writer.close();
字符流写数据―按字符数组写入
- 创建字符流写文件对象∶
Writer writer = new FileWriter("dest.txt") ;
- 调用方法写入数据∶
char[] chs = {橙’,’心',’橙’,’意’};writer.write(chs);
写一个字符数组
- 异常处理:
throws IOException
- 关闭资源:
writer.close();
字符流写数据-按字符串写入
- 创建字符流写文件对象∶
Writer writer = new FileWriter("dest.txt");
- 调用方法写入数据∶
writer. write("小黑爱学习");写一个字符串
- 异常处理:
throws IOException
- 关闭资源:
writer.close();
字符流拷贝文件
按单个字符读写
- 创建字符流读文件对象∶
Reader reader = new FileReader("readme.txt")
- 创建字符流写文件对象︰
Writer writer = new FileWriter("dest.txt");
- 调用方法读取数据︰
int data = reader.read() :
- 调用方法写入数据︰
writer. write(data) ;
- 异常处理:
throws IOException
- 关闭资源︰
reader.close();
writer.close();
创建字符流读文件对象∶
Reader reader = new FileReader("readme.txt") ;
创建字符流写文件对象∶
Writer writer = new FileWriter("dest.txt") ;
调用方法读取数据:
char[] chs = new char[2048];int len = reader.read(chs);
调用方法写入数据:
writer. write(chs,0,len) ;
异常处理:
throws IOException
关闭资源:
reader.close();writer.close();
复制代码
字符缓冲流拷贝文件的标准代码
创建字符流读文件对象∶
BufferedReader br = new BufferedReader(
new FileReader("readme.txt"));
创建字符流写文件对象∶
BufferedWriter bw = new BufferedWriter(
new FileWriter("dest.txt"));
异常处理:
throws IOException
使用while循环读写数据:
int len;
while((len = br.read()) != -1) {
bw.write(len) ;
}
关闭资源:
br.close() ;bw.close() ;
复制代码
字符缓冲流用法:
分类:
BufferedReader:字符缓冲输入流(也叫高效字符输入流)
成员方法:
public String readLine();一次读取一行数据并返回读取到的内容,读不到返回null
BufferedWriter:字符缓冲输出流(也叫高效字符输出流)
成员方法:
public void newLine () ;根据当前操作系统给出对应的换行符.
特点:
字符缓冲流自带有缓冲区,大小为8192个字符,也就是16KB.
复制代码
//需求:通过字符缓冲流"一次读写一行"的方式,将1.txt文件中的内容拷贝到2.txt文件中.//1.创建字符缓冲输入流对象,关联数据源文件.
//合并版
BufferedReader br = new BufferedReader(new FileReader("lib/1.txt") );
//2.创建字符缓冲输出流对象,关联目的地文件.
BufferedWriter bw = new BufferedWriter(new FileWriter("lib/2.txt") );
//3.定义变量,记录读取到的内容.
String str ;
//4.循环读取,只要条件满足就一直读,并将读取到的内容赋值给变量.
while((str = br.readLine)) != null){
//5.将读取到的内容写入到目的地文件中.
bw.write(str) ;
//千万注意一个小细节,你特别容易忽略
//千万别忘记换行
bw.newLine();
}
//6.释放资源.br.close() ;
bw.close() ;
特点:
字符缓冲流自带有缓冲区,大小为8192个字符,也就是16KB.
注意:
字符流只能拷贝纯文本文件.
复制代码
字节流读写文件
字节流拷贝文件―按单个字节读写
创建字节流读文件对象∶
InputStream is = new FileInputStream("Desktop.jpg");
创建字节流写文件对象∶
OutputStream os = new FileOutputStream(
"D: \l博学谷桌面.jpg") ;
异常处理:
throws IOException
使用while循环读写数据:
int b;
while((b = is.read()) != -1) {
os.write(b);
}
关闭资源:
is.close() ;
os.close( ;
复制代码
字节流拷贝文件―按字节数组读写
创建字节流读文件对象:
InputStream is = new FileInputStream("Desktop. jpg");
创建字节流写文件对象∶
OutputStream os = new FileOutputStream(
"D: \l博学谷桌面.jpg") ;
异常处理:
throws IOException
定义字节数组,每次读取2048个字节:
byte[] b = new byte[2048];
使用while循环读写数据︰
int len;
while((len = is.read(b)) != -1) {
os. write(b,0,len) ;
}
关闭资源;
is.close() ;
os.close() ;
复制代码
字节缓冲流拷贝文件的标准代码
创建字节缓冲流读文件对象∶
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream("a. jpg"));
创建字节缓冲流写文件对象:
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(
"b.jpg"));
异常处理:
throws IOException
使用while循环读写数据︰
int len;
while((len = bis.read()) != -1) {
bos.write(len) ;
}
关闭资源:
bis.close() ;
bos.close();
复制代码
暂无评论