• 异常,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) 
    • 字符缓冲流(高效流)
  • 相关阅读:
    RHEL 6.3 详细安装教程
    如何利用sendmail发送外部邮件?
    阿里云API网关(14)流控策略
    阿里云API网关(13)请求身份识别:客户端请求签名和服务网关请求签名
    OpenID Connect 是什么?
    OpenID Connect + OAuth2.0
    OAuth是什么?
    OpendID是什么?
    【华为无线路由器】连接【广电光纤入户设备】宽带上网
    windows7.0旗舰版安装后控制面板自带的Microsoft程序
  • 原文地址:https://www.cnblogs.com/haojia/p/12386236.html
Copyright © 2020-2023  润新知