IO流-异常

本文深入探讨了Java中的异常处理机制,包括运行时异常、空指针异常及IndexOutOfBoundsException等常见异常类型,并详细讲解了如何使用try...catch...finally进行异常处理。此外,还全面介绍了Java IO流的概念、分类及常用操作,如字节流和字符流的使用,以及File类的功能。

1.异常

java运行过程中出现的错误

异常分类
运行时异常RunTimeException
RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。
空指针
当应用程序试图在需要对象的地方使用 null 时,抛出该异常。这种情况包括:

调用 null 对象的实例方法。
访问或修改 null 对象的字段。
将 null 作为一个数组,获得其长度。
将 null 作为一个数组,访问或修改其时间片。
将 null 作为 Throwable 值抛出。

越界 类 IndexOutOfBoundsException
指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。

Throwable

  • Error
  • Exception–RunTimeException
  • Throwable

处理方案

  1. 虚拟机默认处理方案
  2. 异常处理方案

try…catch…finally
try捕获异常,
catch处理异常(要不然是异常的类,要不然是异常的父类)
一旦发现try中的代码有问题就会被catch处理,后面的就不会执行。
finally,语句一定会执行,除非虚拟机关闭
用于释放资源

throw
throws
定义方法时需要把问题暴露出来让调用者去处理,那么久通过throws在方法上进行标识。

原则
如果功能内部可以将问题处理,用try
如果处理不了,交由调用者处理,用throws

区别
后续程序需要运行就用try
不需要运行就用throws

自定义异常会和throw配合使用

File类

文件和目录路径名的抽象表现形式。

成员方法
创建功能,删除功能,重命名功能,判断功能,基本获取功能,高级获取功能。

递归思想(慎用)
写的不好可能会让整个代码陷进去

IO流

分类
按照数据流向,分为输入流和输出流
按照类型分类,分为字节流和字符流
就用字节流,就是英文的话字节流完全没问题,中文会用到字符流。

常用基类
字节流的抽象基类:InputStream,OutputStream
字符流的抽象基类:Reader,Writer

InputStream的常用方法
close,关闭流
read,读数据

OutputStream的常用方法
close,关闭流
write,写数据
flush,刷新此输出流并且强行写出所有缓冲的输出字节
就是马上把当前缓冲流中的东西输出到文件

  • 读数据和写数据
  • 字节流:OutputStream,FileOutputStream;InputStream,FileInputStream;
  • 字节缓冲输出流:BufferedOutputStream,BufferedInputStream;
  • 字符输出流:OutputStreamWriter,FileWriter;InputStreamReader,FileReader;
  • 字符缓冲流:BufferReader,BufferWriter(高效)
  1. 结尾是reader或者writer,就一定是字符流。 reader是输入流,就是看的; writer是输出流,就是写的;
  2. 其他的都是自己接,output的都是输出流,就是写的;input的都是输入流,就是读的
  3. 子类的后缀,就是父类。

// fileReader = new InputStreamReader(new FileInputStream(file),“UTF-8”);
修改编码集

其他流

主要是序列化流和反序列化流

package demo1;

import java.io.*;
import java.util.Date;
import java.util.Scanner;

public class TestDemo4 {
    public static void main(String[] args) {




        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名注册:");
        String next = sc.next();
        Student s1 = new Student(next);
        register(next);

        while (true){
            System.out.println("------------------------------");
            System.out.println("请输入登录用户名");
            String sname = sc.next();
            boolean login = login(sname);
            if (login){
                System.out.println("登录成功!欢迎:"+sname);
                break;

            }else {
                System.out.println("用户名有误或不存在。");
            }
        }

    }



    public static void register(String s){
        Student s1 = new Student(s);//!!!!!!!!!!!!竟然没有写参数!!!!愚蠢!!!!!!!!
        //写进去
        FileOutputStream fos = null;
        ObjectOutputStream oos = null;

        try {
            fos = new FileOutputStream("g:\\UserDao.txt");
            oos = new ObjectOutputStream(fos);

            oos.writeObject(s1);


        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                oos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static boolean login(String s){
        //取出来

        FileInputStream fis = null;
        ObjectInputStream ois = null;
        Student st = null;

        try {
            fis = new FileInputStream("g:\\UserDao.txt");
            ois = new ObjectInputStream(fis);

            st = (Student)ois.readObject();


        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                ois.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        if (st != null){
            if (s.equals(st.getName())){
                return true;
            }
        }else {
            return false;
        }

        return false;

    }

}

properties集合(框架用)

Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。

package demo2;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class TestDemo2 {
    public static void main(String[] args) throws IOException {

        Properties ps = new Properties();
        InputStream inputStream = new FileInputStream("g:\\mima.properties");
        ps.load(inputStream);
        String mi1 = ps.getProperty("mi");
        String mi2 = ps.getProperty("ma");
        String mi3 = ps.getProperty("dio");
        System.out.println(mi1);
        System.out.println(mi2);
        System.out.println(mi3);


    }
}

在File类中掌握创建文件的对象
IO流中主要掌握字节流,字符流,输入流输出流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值