javaSE(18)(IO大总结)

1.平时所说的“错误”一般指的是编译错误,此错误会导致程序无法运行。例如:缺少分号,变量重命名等。
2.异常指的是程序在运行期间出现的一些不可预料的错误,此错误会导致程序中断运行,例如:空指针、除0,下标越界等。
3.异常处理:异常不可预料,并且无法避免,我们所说的异常处理,不是把异常规避掉而是不能因为异常的发生导致程序中断运行。
4.java异常处理机制:通过5个关键字来实现:try、catch、finally、throw、throws。
5.常见的异常类型:

6.空的catch块本身就可以捕获并处理异常,但为了便于调试,一般在catch块中输出异常相关的一些信息。当然也可以输出自定义异常提示信息

7.如果不能确定代码在运行时产生哪些异常,那么保险起见可在多重chatch块的最后捕获Exception。java7提供了新特性中简化了多重catch块的语法catch(NullPointerException | ArrayIndexOutOfBoundsException ex);
8.在try—catch块后加入finally,可以确保finally之前无论是否发生异常,finally块中的代码总能执行。实际开发中一般在finally块中释放之前打开的资源,例如IO流、数据库等。
9.声明异常:如果方法内的代码可能出现异常,那么通常可以在方法内使用try-catch进行异常处理。但有时候方法内可能不知道怎么处理,或者需要用户(调用者)做出异常处理。就用到了声明异常,使用关键字throws。
10.抛出自定义异常,Exception类及其子类是java提供的标准异常类,一般由jvm抛出异常对象。有时候需要我们手工抛出自定义异常类。
11.throw与throws区别:throws出现在方法声明中,throw出现在方法体中,throws用来声明此方法在运行时可能抛出的异常类型,并不是抛出异常,将来谁调用这个方法就有谁来处理异常。
12.throw用来明确的抛出一个异常对象,通常由程序员根据业务手工抛出,一般用于抛出自定义异常,也可以抛出java标准异常。
13。RuntimeException及其子类如果在方法中被throw,可以不用再方法上声明。一个方法被覆盖时,覆盖他的方法必须抛出相同的异常或异常的子类。如果父类抛出多个异常,那么重写(覆盖)方法时必须抛出那些异常的一个子集,不能抛出新的异常。
14.文件操作:文件时组织一堆数据的方式,类型有很多,比如:.txt .doc .mp3,应用程序经常需要对文件进行操作,java提供了java.io.FIle类用于对文件的封装,File类定义了一些与平台无关的方法供我们来操作文件,例如创建,删除,重命名文件等。文件或文件夹使用File类进行封装的。
15.File类:操作文件常用的方法和操作文件夹常用的方法见博客代码。
16.文件过滤器:java.io.FilenameFilter接口,boolean accept(File dir,String name),File 类提供了如下两个方法使用过滤器:list与listFiles。

17.IO流,输入输出流,java中的文件流分为输入流和输出流简称IO流,是对文件输入输出的抽象。
18.字节流:一次读写一个字节(8位),适用于图片和音视频等文件,包括文本文件,所有的文件。字符流:一次读写两个字节(16位),适用于文本文件,word文件等Unicode字符。字节流的抽象类:InputStream和OutputStream。字符流的抽象类:Reader和Writer。所有文件最终都是以字节形式存储在硬盘上,对于汉字,读取时:先得到其字节并放入输入流,然后转换成字符显示出来,写入时:先把字符转换为字节,然后放入输出流写入到硬盘
19.字节流的抽象类:InputStream和OutputSteam常用子类:FIleInputStream和FIleOutputStream
20.字符流抽象类:Reader和Writer常用子类:FileReader和FileWriter。
21.字节输出流的常用子类见博客代码。
22.字符缓冲区:缓冲区就是内存中的一块区域,读写的时候可以先把数据放到此处,满了之后才进行真正的读写,避免了频繁读写硬盘。改为了批量操作,提高效率,默认缓冲区大小为8K,超过就会自动写,没超过就需要调用flush或者close才会写。
23. 所有文件最终都是以字节形式存储在硬盘上,对于汉字,读取时:先得到其字节并放入输入流,然后按系统默认字符编码转换成字符显示出来;写入时:先把字符按系统默认字符编码转换为字节,然后放入输出流写入到硬盘,系统默认字符编码:System.getProperty(“file.encoding”)) ;
24.IO操作必须进行异常处理,资源释放应当放在finally块中,try-catch最好放在最外层。

25.缓冲流(高效流)字节默认没有缓冲区,字符默认缓冲区只有8K,当遇到较大文件的读写时,需要进一步提高读写效率。
26.四种高效流:

27.转换流:所有文件最终都是以字节形式存储在硬盘上,但是用户最终操作的是字符,因此字符和字节之间需要按照某种字符编码(ISO-8859-1 UTF-8 GBK)进行转换。
28.InputStreamReader:是字节流通向字符流的桥梁,起到转换作用。OutputStreamWriter是字符流通向字节流的桥梁,起到转换作用。

29.标准输入输出流:System类中的in和out,他们各代表了系统标准的输入和输出设备。System.in的类型是InputStream。System.out的类型是PrintStream,他是OutputStream。
30.字符编码问题:iso-8859-1(西方字符)gbk国标,是gb2312的扩展,utf-8.
31.字符串的编码问题(读取时)newString()时可以指定编码,统一打成原型,然后new String时指定编码。
32.装饰着设计模式:在不改变原来类的情况下扩展该类的功能。层层包装。

33.递归算法:方法自身调用自身,类似循环,必须有出口,否则就像死循环一样,会内存溢出,调用此处过多也会内存溢出。
34.打印流:可以很方便的输出不同类型的数据。PrinteStream:字节打印流,继承自OutputStream。PrintWriter:字符打印流,继承自Writer。
35. PrinteStream底层采用字节流,PrintWriter:底层采用字符流,官方推荐使用PrintWriter。
36.Properties 类:实际开发时经常会遇到“键值对”形式的配置文件,也叫属性配置文件,扩展名是.properties.专门用来解析属性配置文件,拥有和hashmap一样的方法,优势是可以和IO流结合使用。
37.对象流:把一个对象写到一个文件中。
38.序列化:把对象以流的形式写到文件中叫序列化,把对象以流的形式从文件总读取出来叫反序列化。对象流如下:

别人的总结:
IO流的命名:
FileInputStream
FileOutputStream
BufferedInputStream
BufferedOutputStream

FileReader
FileWriter
BufferedReader
BufferWriter

InputStreamReader
OutputStreamWriter

一、File
1.该类既可以封装单个文件,也可以封装一个目录
2.exists isFile isDirectory getName getPath length list listFiles
createNewFile mkdir mkdirs delete renameTo

二、基本字节流
FileInputStream
FileOutputStream

read() read(byte[] b)
write(int c) write(byte[] b) write(byte[] b,int off,int length)

三、基本字符流
FileReader
FileWriter

read() read(char[] c)
write(int c) write(char[] c) write(char[] b,int off,int length) write(String s)

复制
1.架两个管道
2.来辆车
3.while(true)
{
int res=输入流对象.read(车);
if(res==-1)
break;
else
输出流对象.write(车);
}

四、缓冲流
实际开发时如果遇到较大的文件,例如视频,就需要用到缓冲流来提高效率
BufferedInputStream
BufferedOutputStream
BufferedReader readLine()
BufferWriter newLine()

五、转换流
当文件的编码跟系统默认编码不一致时,容易出现中文乱码问题,这时候就需要用到转换流
InputStreamReader
OutputStreamWriter

六、打印流
1.打印流是输出流,PrintStream和PrintWriter
2.可以更方便的输出各种类型的数据
3.print(Xxx x) println(Xxx x)

七、对象流
1.使用其他流写对象时,只能写toString的返回值
2.对象流可以直接写对象(序列化),还可以反序列化(组装成对象)
3.ObjectOutputStream(writeObject) ObjectInputStream(readObject)

八、Properties类
1.什么是属性配置文件
2.Properties类存储数据时跟Map是一样的,但是可以结合IO流实现对属性配置文件的读写
3.put setProperties get getProterties list(输出流对象) store(输出流对象,注释) load(输入流对象)

九、装饰设计模式
1.现有一个类,功能较弱,在不改变源码的前提下,进行功能加强
2.继承 臃肿
3.吃饭的案例

十、字符串编码
统一先打回原形(byte[]),然后new String的时候指定编码重新组合

你可能感兴趣的:(异常处理,IO,异常)