day17笔记
来源:互联网 发布:mysql大小写 字符串 编辑:程序博客网 时间:2024/05/21 12:46
IO流的前奏:
1)异常类:
2)File类
异常
举例: 有一个班长骑车出去旅行
1)在骑行的过程中,前方的山路坍塌了,导致它不能骑行了------>不可抗力的因素
2)在骑行的过程中,发现轮胎没气了,也会出现问题----------->骑行志强应该检查的问题
3)山路两边是石子,中间是平坦的大道,但是班长就喜欢在边上骑行,导致轮胎没气;------>no zuo no die
出现第一种情况:严重问题,不处理---->开发中:内存溢出! 开发团队,集体研究这个问题!(假设加载大量图片的时候:ImageLoader)
大的方向:Throwable
两个具体的子类:
Error Exception
第二种情况和第三种情况都属于异常的范畴:
Exception的分类:异常类
子类:
1)编译时期异常:只要不是RuntimeException中的异常都属于编译时期异常:比如:IOException(IO流中的),ParseException(解析异常)
出现的原因:要么语法有问题,要么使用的是Sun公司提供的一些类的中的方法,(这个方法本身调用的时候就会异常存在),调用者必须处理,不处理不行,需要编译通过
2)运行时期异常:RuntimeException
可能由于我们代码的逻辑不够严谨导致的问题举例,NullPointerException:空指针异常!
需要个对象进行非空判断,来防止该问题的出现!
如何处理异常?
分为两种方式:
1)标准格式:try...catch...finally:捕获异常!
2)throws 抛出异常
首先:方式1:处理异常:
try...catch...finally
变形格式:
try...catch
try...catch...catch
try...finally...(多线程的时候:Lock锁)
经常使用的格式:
try{
//可能有很多行代码---->一旦有出现问题了
}catch(异常类名 变量名){
输出语句处理
}
针对多个异常进行处理,Jdk7以后又一种新的处理方式:
try{
//可能会出现问题的代码
//....
//...
}catch(异常类名1 | 异常类名2 ....变量名){
处理异常...
}
这个格式的注意事项:
1)针对多个异常类名之间是一种平级关系
2)这种格式在实际开发中,虽然有多个异常,但是针对具体的异常给出具体的处理!
异常处理第二种方式:
throws:抛出异常
在方法声明上抛出异常,由于,编译时期异常,调用者必须要处理
实际开发中,尽量的不要在main()方法抛出异常,在字方法中可以抛出异常,讲课为了方便,就在main方法抛出
面试题:(1000%问到)
throws和throw的区别?
throws:抛出
后面跟的异常类名,可以跟多个异常类名,中间用逗号隔开
throws在方法声明上抛出,表示异常的一种可能性
由调用者去处理
throws表示抛出异常的一宗可能性
throw:抛出
后面跟的异常对象(匿名对象),只能跟具体的一个异常对象
throw在方法中的语句中抛出,表示异常的绝对性
有方法中某些语句处理
在实际开发中:
throws要比throw用的比较多,而try...catch...又比throws用的比较多!
异常的注意事项:
1)子类在重写父类中的方法的时候,如果父类中方法有抛出异常,那么子类重写的这个方法,
抛出异常不能够比父类中该方法异常大,(要么是父类中该方法异常的子类)(最起码应该保存一致)(父亲坏了,儿子不能比父亲更坏)
2)子类继承父类,要重写父类中的方法的时候,如果本身父类中该方法没有异常,那么在子类中重写该方法的时候,不能抛出异常,只能捕获异常!
IO流之前要先懂得如何封装硬盘上的以文件或者目录,使用File类
File,是用来描述文件或者目录(文件夹)的路径的抽象表现形式
常用的构造方法:
public File(String pathname):给定路径名以字符串来表示当前这个文件或者文件夹(开发中推荐使用第一种构造方法)
public File(String parent,String child)根据 parent 路径名字符串和 child 路径名字符串创建一个新 File对象
public File(File parent, String child)根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例
需求:要表示当前计算机e盘下一个demo文件夹中的一个a.txt文件
使用File对象可以创建文件或者文件夹
里面跟创建有关的成员方法:
public boolean mkdir()创建此抽象路径名指定的目录(文件夹)。
如果当前某个盘符下已经有了这个目录(文件夹),不会在创建了.
public boolean createNewFile():创建文件的,如果已经有这个文件了,不在创建,并且该方法本身就会编译时期异常IOException
throws IOException
public boolean mkdirs()创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。(创建文件夹,文件夹不存在,才开始创建)
注意事项:
自己要清楚要创建的是文件夹还是文件,每个方法都不一样!
没有带盘符,默认到当前项目下创建文件或者文件夹..
如果不小心创建文件或者文件夹的时候,没有写盘符那么就会当前项目下进行创建
public boolean delete()删除此抽象路径名表示的文件或目录
删除不能删除带有文件或者文件夹的目录
注意事项:
删除的方法不能删除带有目录或者文件的文件夹
删除多个目录,必须逐一删除!
File类中的重命名功能:
public boolean renameTo(File dest)重新命名此抽象路径名表示的文件。
1)使用这个功能:当两个抽象路径一致,那么只是重命名
2)当这两个抽象路径不一致,有剪切并且改名了...
File类中的判断功能:
public boolean isDirectory():判断是否是文件夹经常用到
public boolean isFile():判断是否是一个标准文件经常用到
public boolean canRead():判断是否可读
public boolean canWriter():判断是否可写
public boolean isHidden():判断是否是隐藏文件
public boolean isAbsolute():判断次路径名是否是绝对路径
File类中的获取功能:
public File getAbsolutePath():获取当前文件或者文件夹绝对路径
public String getPath():获取相对路径
public long length()返回由此抽象路径名表示的文件的长度
public long lastModified()返回此抽象路径名表示的文件最后一次被修改的时间
public String getName():获取名称
File类的高级获取功能:
public String[] list():返回对象是一个字符串数组,当前哪个一盘符下的所有的文件以及文件夹的字符串名称数组
public File[] listFiles():返回对象是一个File数组,当前哪个盘下的所有的文件以及文件夹的File数组
针对输出流中写数据的方法:
public abstract void write(int b):将指定的字节写入到输出流中
public void write(byte[] b):将指定的字节数组写入到输出流中
public void write(byte[] b, int off,int len):将字节数组的一部分写入到输出流中
写入了这个数据,发现数据和数据之间没有换行?
需要写入换行符号,每一个系统他们对应IO这块换行符号是不一样的
对于windows操作系统来说:换行符号:\r\n
对于Linux操操作系统来说:\n
对于Mac操作系统来说:\r
如何给这个文件追加写入数据呢?
public FileOutputStream(File file,boolean append):第二个参数设置为true,表示写入文件的末尾处
判断c盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
*
* 分析:
* 1:用File对象封装c盘
* 2:获取当前e盘下的所有的文件以及文件夹的名称数组或者File数组
* 3):针对对象要做非空判断
* 4)遍历:File数组增强for遍历
* 获取每一个File对象
* 判断这个File对象是否是文件:isFile()
* 如果是文件,还要判断是否以.jpg结尾
* 是,就输出
* 不是,不管
/* 方式2:在获取的时候就已经满足条件
*
* 引出:文件名称过滤器 -------Javaweb中将过滤器以及上传和下载.
* public String[] list(FilenameFilter filter)
* public File[] listFiles(FileFilter filter)
*
* 参数是一个接口,(开发中使用的接口的匿名内部类的方式)
* 实现一个方法:
* boolean accept(File dir, String name):这个方法的返回值是true(就是表示要将当前文件夹或者文件的名称添加数组中),false(表示不添加数组中)
* 经常会看到这种格式:
* 捕获异常的标准格式: try...catch...finally
* 用法:
* finally经常用在数据库中或者IO流中,用来释放资源的
* finally中的代码一定会执行.
*
* finally中的不执行只有一种情况:就是Jvm退出了---------->System.exit(0) ;
*
* 面试题:
* final,finalize,和finally的区别?
* 区别:
* final:表示最终的,终态的意思
* 可以修饰类:类不能继承
* 可以修饰成员方法:成员方法被重写
* 可以修饰成员变量:此变量是一个常量:自定义常量: public static final int ORANGLE = 100 ;
* finalize:它表示通过gc垃圾回收器回收不用的对象或者是变量,System.gc():实质,调用的是重写了Object类中的
* finalize()方法,表示回收没有跟多引用对象或者变量等等...
* finally:不能单独使用,和try...catch...finally中一块使用,(异常,IO,数据库中中使用的),是用来释放资源
* finally中的代码一定会执行,并且除非Java虚拟机Jvm退出了,才不会执行!
*
*
* 多线程中:
* sleep()和stop()的区别?
*
*
/**
* IO流:设备和设备之间的数据传输
* 设备和设备指的是:硬盘和内存之间的数据传输
*
* IO流的分类:
* 按流的方向分:
* 输入流:读数据的
* 输出流:写数据的
*
* 按数据类型分:
* 字节流:
* 字节输入流:InputStream
* 字节输出流:OutputStream
* 字符流
* 字符输入流:Reader
* 字符输出流:Writer
*
* 需求:输出一个文本文件,给文本文件中写一句话:hello,IO,Im'coming...
*
* 分析:
* 一旦提到文本文件,那么就是用字符流,但是字符流是在字节流之后出现的,所以先学习字节流!
* 用windows自带的记事本打开一个文件,你自己看懂,一般情况使用字符流最好.如果打开之后,读不懂,那么使用字节流.
* 使用字节流,来输出这个文件
* OutputStream:字节输出流,该类是抽象类,不能实例化,但是这里提到文件,刚才学习的File类就是描述文件的.
* FileOutputStream:OutputStream的子类
* 构造方法:
* public FileOutputStream(String name)
* 在抽象类的前面加上前缀:
* XXXInputStream
* XXXOutputStream
* XXXReader
* XXXWriter
* FileInputStream
* FileReader
* FileWriter
*
* 开发步骤"
* 1)创建文件输出流对象
* 2)写数据
* 3)关闭资源
*
* @
*/
- day17-笔记
- day17笔记
- day17笔记
- [Java视频笔记]day17
- 传智播客-Java学习笔记day17
- JavaScript-day17-个人学习笔记
- day17
- day17
- day17
- Day17
- Day17
- day17
- DAY17
- Day17
- HashSet、LinkedHashSet、TreeSet+JAVA学习笔记-DAY17
- day17:JavaScript DOM编程学习笔记08
- 超全面的JavaWeb笔记day17<JDBC>
- Day17毕向东java学习笔记-Collections 的使用。
- 操作系统时间比HVR版本发布时间旧时,解压会报错
- 高德地图js api 轨迹回放 多人并且控制谁先播放
- Python练习题(3)
- 新生代和老年代
- ubuntu 进不去图形界面,如何重新安装驱动
- day17笔记
- mysql与nfs集群
- springBoot
- 3dsmax 效果图 第七课 材质
- BeanHandler 与BeanListHandler总是报错问题
- json字符串、json对象、数组 三者之间的转换
- java三种实现文件上传方法
- WEEK 8 JAVA作业
- java中的集合类详解