实训第三周/星期三

要求掌握:最大的字体就是

1 文件的操作

作者:鸾林居士:
https://blog.csdn.net/abc_12366/article/details/79753368
问题描述:

  1. 你是否了解Java文件类(File)?
    1.1 构造器的四种方式?
    1.2 在取得实例后通过createNewFile()方法以创建一个新文件
    1.3 file实例可以用的方法。1
    1.3.1 Java文件读写用到什么类?
    1.3.2 其他文件操作:字符流有两个抽象类Writer和Reader

1.1自己学习的内容:

1.1.1目录的定义:

目录是一个包含其他* 文件和 * 路径列表的File 类

1.1.2 目录的操作:

当这个对象是目录的时候,该对象的list( )方法来提取该目录内部其他文件和目录的列表
使用方式 有二:

  1. String[ ] list( ) 文件列表在一个String 对象数组中返回
import java.io.File;
class DirList {
public static void main(String args[]) {
String dirname = "/java";
File f1 = new File(dirname);
if (f1.isDirectory()) {//是目录么  返回  是

System.out.println("目录  of " + 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] + " is a directory");
 } else {
System.out.println(s[i] + " is a file");
 }
}

} else {
System.out.println(dirname + " is not a directory");
}
}}
下面是程序的样本输出(当然,目录下的内容不同,输出也不同):
目录 of /java
bin is a directory
index.html is a file
include is a directory
src.zip is a file
  1. 使用FilenameFilter
    你总是希望能够限制由list( )方法返回的文件数目,使它仅返回那些与一定的文件名方式或者过滤(filter)相匹配的文件。
    为达到这样的目的,必须使用list( )的第二种形式:

String[ ] list(FilenameFilter FFObj)

该形式中, FFObj是一个实现FilenameFilter接口的类的对象。
FilenameFilter仅定义了一个方法, accept( )。该方法被列表中的每个文件调用一次。它的通常形式如下:

boolean accept(File directory, String filename)

当被directory 指定的目录中的文件(也就是说,那些与filename 参数匹配的文件)包含在列表中时, accept( )方法返回true ,
当这些文件没有包括在列表中时, accept( )返回false。

下面显示的OnlyExt 类实现FilenameFilter接口,它被用来修饰前面的程序,限制由 list( )返回的文件名的可见度,把对象被创建时以指定扩展名结束的文件归档。

import java.io.*;
public class OnlyExt implements FilenameFilter {
String ext;
public OnlyExt(String ext) {
this.ext = "." + ext;
}
public boolean accept(File dir, String name) {
return name.endsWith(ext);
}
}//现在它只显示以.html 为扩展名的文件。


import java.io.*;
class DirListOnly {
public static void main(String args[]) {
String dirname = "/java";
File f1 = new File(dirname);
FilenameFilter only = new OnlyExt("html");
String s[] = f1.list(only);
for (int i=0; i < s.length; i++) {
System.out.println(s[i]);
}
}
}

list方法的演化版listFiles()方法

istFiles( )形式如下:
File[ ] listFiles( )
File[ ] listFiles(FilenameFilter FFObj)
File[ ] listFiles(FileFilter FObj)
上述三种形式以File对象矩阵的形式返回文件列表,而不是用字符串形式返回。
  • 第一种形式返回所有的文件,
  • 第二种形式返回满足指定FilenameFilter接口的文件。除了返回一个
    File 对象数组,这两个listFiles( )方法就像list( )方法一样工作。
  • 第三种listFiles( )形式返回满足指定FileFilter的路径名的文件。 FileFilter只定义了一个accept( )方法,该方法被列表中的每个文件调用一次。它的通常形式如下:

boolean accept(File path)

如果文件被包括在列表中(即与path参数匹配的文件), accept( )方法返回true,如果不被包括,则返回false

1.1.3 创建目录的操作:

另外两个有用的File类的方法是mkdir( )和mkdirs( )。 mkdir( )方法创建了一个目录,创
建成功返回true,创建失败返回false。创建失败是指File对象指定的目录已经存在,或者是
因为整个路径不存在而不能创建目录。创建路径不存在的目录,用mkdirs( )的方法。它创
建目录以及该目录所有的父目录。

2 文件流的操作

结构图:
在这里插入图片描述

在这里插入图片描述
更多详细介绍在《实训第三周/星期四》

4 java异常处理机制(exception)

4.1基本概念

总框架:

简单原理:

  1. 区分 Error(错误)和 Exception(异常) 概念
    错误:运行期间的错误–>直接导致系统崩溃,不是编译器力+程序员所能解决的,往往需要重新启动电脑。
    异常: 程序员编译代码造成的错误,可以修复。
  2. 意义:提升程序的健壮性
    在于其回答了以下三个问题:
    什么出了错?
    在哪出的错?
    为什么出错?
    在有效使用异常的情况下,
    异常类型回答了“什么”被抛出,
    异常堆栈跟踪回答了“在哪“抛出,2
    异常信息回答了“为什么“会抛出,

有三个原则可以帮助你在调试过程中最大限度地使用好异常,这三个原则是:

具体明确
提早抛出
延迟捕获 3
详细内容点击小2浏览

  1. 所有异常我们都要 捕获么?
    不是 分类:
  • 可选:都叫:运行时异常/非检查异常(RuntimeException)
  • 必须:都叫:非运行时异常/检查异常(checked异常)
  • 当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明(创建异常对象)抛出它,否则编译不会通过
    在这里插入图片描述
异常说明
java.lang.NumberFormatException字符串转换为数字异常
OutOfMemoryError内存溢出异常
StackOverflowError深递归导致栈耗尽
CloneNotSupportedException试图克隆一个不能实现Cloneable接口的对象
IllegalAccessException对一个类的访问被拒绝
InstantiationException试图创建一个抽象类或者抽象接口的对象
InterruptedException一个线程被另一个线程中断
NoSuchFieldException请求的字段不存在
NoSuchMethodException请求的方法不存在
  1. Java异常处理通过5个关键字控制: try、 catch、 throw、 throws和 finally。
详细描述:
程序声明了你想要的异常监控包含在一个try块中。 如果在try块中发生异常,它被抛出。你的代码可以捕捉这个异常(用catch)并且用某种合理的方法处理该异常。系统产生的异常被Java运行时系统自动引发。手动引发一个异常,用关键字throw。 任何被引发方法的异常都必须通过throws子句定义。 ——绝对被执行的代码被放置在finally块中。——

那么究竟Error是否需要捕捉呢?JDK中Error类的的注释(如下)里提到过,Error是一种严重的问题,应用程序不应该捕捉它

catch子句的要点

构造catch子句的目的是解决异常情况并且像错误没有发生一样继续运行

当你用多catch语句时,记住异常子类必须在它们任何父类之前使用是很重要的。这是
因为运用父类的catch语句将捕获该类型及其所有子类类型的异常。这样,如果子类在父类
后面,子类将永远不会到达。而且, Java中不能到达的代码是一个错误。例如,考虑下面
的程序:

嵌套try语句
class NestTry {
public static void main(String args[]) {
try {
    int a = args.length;
    int b = 42 / a;
System.out.println("a = " + a);
try { 
   if(a==1) a = a/(a-a); 
   if(a==2) {
   int c[] = { 1 };
   c[42] = 99; 
}
 catch(ArrayIndexOutOfBoundsException e) {
System.out.println("Array index out-of-bounds: " + e);
}
} catch(ArithmeticException e) {
System.out.println("Divide by 0: " + e);
     }}}

结果:

C:>java NestTry
Divide by 0: java.lang.ArithmeticException: / by zero
C:>java NestTry One
a = 1
Divide by 0: java.lang.ArithmeticException: / by zero
C:>java NestTry One Two
a = 2
Array index out-of-bounds: java.lang.ArrayIndexOutOfBoundsException

通过这个例子你可以了解他是如何运行的。

引发(throw)

使用样式;

  1. throw Throwable类类型 || Throwable子类类型的一个对象

  2. 有两种可以获得Throwable对象的方法:
    在catch子句中使用参数 | | 用new操作符创建。

  3. 程序执行在throw语句之后立即停止;后面的任何语句不被执行。最紧紧包围的try块用来检查它是否含有一个与异常类型匹配的catch语句。如果发现了匹配的块,控制转向该语句;如果没有发现,次包围的try块来检查,以此类推。

throws
  1. 如果一个方法可以导致一个异常但不处理它,它必须指定这种行为以使方法的调用者可以保护它们自己而不发生异常。做到这点你可以在方法声明中包含一个throws子句
  2. 个方法可以引发的所有其他类型的异常必须在throws子句中声明。如果不这样做,将会导致编译错误
下面是包含一个throws子句的方法声明的通用形式
type method-name(parameter-list) throws exception-list
{// body of method
}

这里, exception-list是该方法可以引发的以有逗号分割的异常列表。

创建自己的异常子类

** 同时重写一些Throwable 定义的方法**

方法描述
Throwable fillInStackTrace( )返回一个包含完整堆栈轨迹的Throwable对象,该对象可能被再次引发
String getLocalizedMessage( )返回一个异常的局部描述
String getMessage( )返回一个异常的描述
void printStackTrace( )显示堆栈轨迹
void printStackTrace(PrintStreamstream)把堆栈轨迹送到指定的流
void printStackTrace(PrintWriterstream)把堆栈轨迹送到指定的流
String toString( )返回一个包含异常描述的String对象。当输出一个Throwable对象时,该方法被println( )调用

谈捕捉不得不提到java异常的类结构:

在这里插入图片描述

  • 一个分支是Exception该类用于用户程序可能捕捉的异常情况。它也是你可以用来创建你自己用户异常类型子类的类。
    • RuntimeException该类型的异常自动为你所编写
      的程序定义并且包括被零除和非法数组索引这样的错误。
  • 另一类分支由Error作为顶层, Error定义了在通常环境下不希望被程序捕获的异常。

  1. Java 2 为File 类增添了一些新的方法,你会发现在某些场合这些新增方法很有用 ↩︎

  2. 异常和堆栈信息是用来帮助开发人 员而不是用户的 ↩︎

  3. 作者:ylxfc
    链接:https://www.zhihu.com/question/28254987/answer/40173231
    来源:知乎 ↩︎

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值