异常,File IO

一、异常

  • 什么是异常
    • 代码编译或运行出现了不正常,报错
    • 异常概述       
      •  Java运用面向对象思想,将一些程序中可能出现的问题也封装成对应的类 而将这些类向上抽取,形成了异常体系
    • 异常体系  Throwable
      • Error:程序员无法处理 内存溢出:加内存条
      • Exception重点关注
        • 运行时异常:RuntimeException及其子类:,          处不处理可以运行,
        • 编译时异常,非RuntimeException类和其子类               必须处理,不处理无法通过编译运行
  • 异常处理方式
    •  默认处理:一级一级往上抛出 
      • 例如 : 类似治病,去县级医院看病(main方法处理),看不了,找省级医院(JVM),默认处理==>在控制台打印异常信息
    •  程序员手动处理
      • 为什么我们自己处理异常 : 我们处理 代码可以继续往下执行,虚拟机处理直接程序停止
      • 第一种方式(捕获异常)
      • 例如 : 
        try{
        		//try的作用是检测异常 相当于(检查是否有病)
        		//把有可能出现错误的代码放里面
         }catch(异常类型 变量名){
        		//catch相当于处理异常 (治病)
        		//处理异常的代码
        
         }
         
        • 异常中的常见方法:
          • String toString() : 异常名称+异常原因
          • e.printStackTrace():和虚拟机返回的一样,就是原因和位置
          •  
      • 第二种方式(抛出异常)
        • 向上抛出异常,thows抛出异常 写在 方法的声明后边,  谁来调用方法谁就处理异常(要么继续抛要么自己捕获异常)

二、File

  • 概念 : 文件或目录路径名的表示形式
  • 构造方法 : 
    • public File(String pathname) :将指定的路径名转换成一个File对象
    • public File(String parent, String child) : 根据指定的父路径和文件路径创建File对象
    • public  File(File parent, String child) :根据指定的父路径对象和文件路径创建File对象
  • File的常用功能
    • 创建功能
      • boolean createNewFile() : 当指定文件不存在时创建文件并返回true,否则返回false
      • boolean mkdir()   : 当指定文件夹不存在时创建文件夹并返回true,否则返回false
      • boolean mkdirs() : 创建指定文件夹,当文件夹所在的目录不存在,则顺道一块创建了
      • 注意: 此案例创建的是文件夹//File f5 = new File("c.txt");
        //System.out.println(f5.mkdir());
    • 删除功能
      • boolean delete() :当指定的文件或文件夹存在时删除文件或者文件夹 并返回true,否则返回false
      • 注意 : 删除一个文件夹,这个文件夹下面不能有其他的文件和文件夹,而且不走回收站
    • 获取功能
      • String getAbsolutePath() : 以String形式返回File对象所指向的绝对路径
      • String getName() : 获取路径的最后一级名字,返回路径的字符串形式(文件文件夹都可以获取)
      • long length() : 返回文件的字节数
      • String getPath() : 返回创建File对象时给的路径
      •  
    • 判断功能
      • boolean exists() : 判断文件或者文件夹是否存在,如果存在则返回true,否则返回false
      • boolean isDirectory() :判断File对象指向的路径是否是文件夹,如果是则返回true,否则返回false
      • boolean isFile()  : 判断File对象指向的路径是否是文件,如果是则返回true,否则返回false

三、IO

字节流:操作的都是多媒体文件(音频,视频,图片)

 Inputream:字节输入流
 OuputStream:字节输出流

IO流分类

字节流(操作任意文件)

  • 字节缓冲区流:(字节高效流)
    • BufferedOutputStream:字节缓冲输出流
    • BufferedInputStream:字节缓冲输入流
    • 注意 : 为什么构造方法传递的是一个:OutputStream,而不是具体的文件或者路径呢?
      字节缓冲区流仅仅提供缓冲区,而真正的底层的读写数据还得需要基本的流对象进行操作。
  • 字节流读数据出现的问题
    • 问题所在
      • 字节流一次读取一个字节的方式读取带有汉字的文件是有问题的,因为你读取到一个字节后就转为字符在控制台输出了,而汉字是由2个字节组成的,所以这里会出问题。
    • 汉字存储的规则:
      • 文件复制的时候,字节流读取一个字节,写入一个字节,这个没有出现问题,是因为最终底层会根据字节做拼接,
        得到汉字。
      • 原因 : 左边的字节数据肯定是负数,右边的字节数据可能是负数,也可能是正数,大部分情况下是负数。
    • 乱码产生的原因
      • 针对同一个数据采用的编码和解码的编码表不一致
    • String中的编码解码问题
          public byte[] getBytes(String charsetName)
              用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
          public String(byte[] bytes, String charsetName)
              通过使用指定的 charset解码指定的 byte 数组,构造一个新的 String。

字符流(操作文本文件)

  • 转换流其实就是一个字符流。转换流 = 字节流 + 编码表
  • OutputStreamWriter  字符输出流
    • 构造方法
      • public OutputStreamWriter(OutputStream out)   根据默认编码把字节流的数据转换为字符流
      • public OutputStreamWriter(OutputStream out,String charsetName)   根据指定编码把字节流数据转换为字符流
    • 写数据方法
      • public void write(int c):写一个字符
      • public void write(char[] cbuf):写一个字符数组
      • public void write(char[] cbuf,int off,int len):写一个字符数组的一部分
      • public void write(String str):写一个字符串
      • public void write(String str,int off,int len):写一个字符串的一部分
  • InputStreamReader   字符输入流
    • 构造方法
      • public InputStreamReader(InputStream in)
      • public InputStreamReader(InputStream in,String charsetName)   用指定的编码读取数据
    • 读数据方法
      • public int read():一次读取一个字符
      • public int read(char[] cbuf):一次读取一个字符数组
  • 字符流的简化版
    • FileWriter:用来写入字符文件的便捷类
      • 父类为 OutputStreamWriter
      • 构造方法:FileWriter(String fileName) 
    • FileReader:用来读取字符文件的便捷类
      • 父类为 InputStreamReader
      • 构造方法:FileReader(String fileName) 
  • 字符缓冲流(高效流)
posted @ 2019-07-31 19:25  我の女王  阅读(121)  评论(0编辑  收藏  举报