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)关闭资源
 * 
 * @
 */


原创粉丝点击