从零开始学java - 第十天

268 阅读5分钟

这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战

今天继续~

FileInputStream

  • 用于从文件中读取数据,使用关键字new创建 InputStream f = new FileInputStream("C:/java/hello");
  • 可以使用下面的方法对流进行操作:

public void close() throws IOException{} - 关闭文件并释放所有资源

protected void finalize()throws IOException {} - 清除与该文件的连接

public int read(int r)throws IOException{} - 从对象中读取指定字节的数据,返回下一字节数据,触底返回-1

public int read(byte[] r) throws IOException{} - 读取r的长度,返回读取的字节数,触底返回-1

public int available() throws IOException{} - 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数

FileOutputStream

  • 用于创建文件并写入数据 OutputStream f = new FileOutputStream("C:/java/hello")
  • 可以使用下面的方法对流进行操作:

public void close() throws IOException{} - 关闭文件并释放所有资源

protected void finalize()throws IOException {} - 清除与该文件的连接

public void write(int w)throws IOException{} - 这个方法把指定的字节写到输入流中

public void write(byte[] w) - 把指定数组中w.length长度的字节写到OutputStream中

java 目录

创建目录

mkdir() - 创建一个文件夹

mkdirs() - 创建一个文件夹和它的所有父文件夹

public static void main(String[] args) {
    String dirname = "/tmp/user/java/bin"; 
    File d = new File(dirname); 
    d.mkdirs();
}

读取目录

  • 如果file对象是一个目录,方法isDirectory()会返回true
  • 使用方法list()来提取文件目录
public static void main(String args[]) {
    String dirname = "/tmp";
    File f1 = new File(dirname);
    if (f1.isDirectory()) {
        System.out.println("目录 " + dirname); 
        String s[] = f1.list();
        for (int i = 0; i < s.length; i++) { 
            File f = new File(dirname + "/" + s[i]);
            if (f.isDirectory()) { 
                System.out.println(s[i] + " 是一个目录"); 
            } else { 
                System.out.println(s[i] + " 是一个文件");
            }
        } 
     } else { 
         System.out.println(dirname + " 不是一个目录"); 
     }
}

删除目录或文件

java.io.File.delete()

Java Scanner 类

  • java5新特征,用于获取用户的输入 Scanner s = new Scanner(System.in);
  • 使用方法next()可以接收输入
Scanner scan = new Scanner(System.in);
if (scan.hasNext()) {
    String str1 = scan.next(); 
    System.out.println("输入的数据为:" + str1); 
}

使用nextLine方法

  • 与next()作用一样

next()与nextLine()的区别

next()

  • 读取到有效字符后才可以结束输入
  • 输入字符之前遇到的空白,next()方法会自动去掉
  • 有效字符后的空白会被作为分隔符和结束符
  • 不能得到带有空格的字符串

nextLine()

  • 以Enter为结束符,获取输入回车前的所有字符
  • 可以获得空白

java异常处理

java内置异常类

ArithmeticException - 当出现运算错误的时候,会出现此错误

ArrayIndexOutOfBoundsException - 当出现寻找索引不存在数组中时,会出现此错误

ArrayStoreException - 将错误类型的对象存储到对象数组中时会报此错误

ClassCastException - 当试图将对象强制转换为不是实例的子类时,会出现此错误

IllegalArgumentException - 方法的传参出现错误的时候会报此错误

IllegalMonitorStateException - 在某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程的时候会报此错误

IllegalStateException - 在非法或不适当的时间调用方法时产生的信号的时候会报此错误

IllegalThreadStateException - 线程没有处于请求操作所要求的适当状态时会报此错误

IndexOutOfBoundsException - 排序的索引超出范围时会报此错误

NegativeArraySizeException - 试图创建大小为负数的数组会报此错误

NullPointerException - 在需要对象的地方使用null,会报此错误

NumberFormatException - 当字符串不能转换为想要转换的格式时会报此错误

SecurityException - 存在安全侵犯的时候会报此错误

StringIndexOutOfBoundsException - 字符串索引在为负或者超出范围的时候都会报此错误

UnsupportedOperationException - 当不支持请求的操作时会报此错误

java.lang 包中的检查性异常类

ClassNotFoundException - 找不到相应的类

CloneNotSupportedException - 当调用 Object 类中的 clone 方法克隆对象,但该对象的类无法实现 Cloneable 接口时会报此错误

IllegalAccessException - 拒绝访问这个类

InstantiationException - 当试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象因为是一个接口或是一个抽象类而无法实例化时会报此错误

InterruptedException - 一个线程被另一个线程中断

NoSuchFieldException - 变量不存在

NoSuchMethodException - 方法不存在

异常方法

public String getMessage() - 获取异常

public Throwable getCause() - 获取异常原因

public String toString() - 使用getMessage()的结果返回类的串级名字

public void printStackTrace() - 打印toString()结果和栈层次到System.err

public StackTraceElement [] getStackTrace() - 返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底

public Throwable fillInStackTrace() - 用当前的调用栈层次填充Throwable 对象栈层次,添加到栈层次任何先前信息中

捕获异常

try...catch(ExceptionName e1)...

  • ExceptionName就是上面的异常类型

多重捕获块

try{ 
    ...
}catch(ExceptionName e1){ 
    ...
}catch(ExceptionName e2){
    ...
}catch(ExceptionName e3){
    ...
}

throws/throw 关键字

  • 负责抛出异常
throw new RemoteException();

finally关键字

  • finally关键字跟在try代码之后,无论是否有异常,finally都会执行
try{ 
    ...
}catch(ExceptionName e1){ 
    ...
}catch(ExceptionName e2){
    ...
}finally{
    ...
}

声明自定义异常

  • 所有异常都必须是Throwable的子类
  • 如果想要写一个检查性异常类,则需要继承Exception类
  • 如果想要写一个运行时异常类,则需要继承RuntimeException类
class MyException extends Exception{ 
}

基础知识已经学的差不多了,因为我本人比较喜欢游戏,明天会有两个选择,继续看进阶内容和着手试试项目,最近又忙起来了,真是事与愿违😥,看明天的时间安排来决定吧,各位晚安~