A:简答题
1、请把我们讲解过的所有类中的方法在API中找到,并使用自己的话进行描述
Throwable
public String getMessage()
返回该错误的详细信息
public String toString()
返回这个异常的简短信息
public void printStackTrace()
获取异常类名和异常信息 以及异常出现在程序中的位置
printStackTrace(PrintStream s)
打印该时间和指定的打印流的回溯
File
public boolean createNewFile()
创建新文件 若文件存在就不再创建
public boolean mkdir()
创建目录(单层目录)
public boolean mkdirs()
创建目录(多层目录/单层目录)
public boolean delete()
删除文件或目录(只能删除空目录)
public boolean renameTo(File dest)
把文件重命名为指定文件路径
如果路径名相同,就是改名
如果路径名不同,就是改名并剪切
public boolean isDirectory()
判断是否为目录
public boolean isFile()
判断是否为文件
public boolean exists()
判断是否存在
public boolean canRead()
判断是否可读
public boolean canWrite()
判断是否可写
public boolean isHidden()
判断是否隐藏
public String getAbsolutePath()
获取绝对路径
public String getPath()
获取相对路径
public String getName()
获取名称
public long length()
获取长度(字节数)
public long lastModified()
获取最后一次修改时间
public String[] list()
获取指定目录下的文件或文件夹的名称数组
public File[] listFiles()
获取指定目录下的文件或者文件夹的file数组
2、请说说什么是异常?异常的分类?
概述
异常就是Java程序在运行过程中出现的错误
分类
Error
Java虚拟机无法解决的问题
Exception
编译时异常 非RuntimeException
运行时异常 RuntimeException
3、请写出异常处理的两种方式?
a. try...catch...finally
b. throws
4、请说说编译期异常和运行期异常的区别?
编译期异常
java程序必须进行处理 否则程序发生错误 无法通过编译
运行期异常
无需显示处理 可以和编译期异常一样处理
5、请说说throws与throw的区别?
throws
用在方法声明后 后面写异常类名
可以跟多个异常类名 逗号隔开即可
表示抛出异常 让方法调用者处理
throws表示出现异常的一种可能性 不一定会发生这些异常
throw
用在方法体内 后面写异常类名
只能抛出一个异常对象名 (编译期异常 运行期异常)
使用throw则一定会抛出某种异常
6、请说说final、finally与finalize的区别?
final
final是一个状态修饰符 可以用来修饰类 变量 成员方法
被修饰的类不能被子类继承
被修饰的变量不能再次赋值(常量)
被修饰的方法不能被子类重写
finally
在try...catch...finally使用
始终会被执行(JVM不能退出)
finallize
Object类中的一个方法 用来回收垃圾
7、请说说异常的注意事项及如何使用异常处理?
注意事项
a:子类重写父类方法时 子类的方法必须抛出相同的异常 或父类异常的子类 或者子类不抛出异常
b:如果父类抛出了多个异常 子类重写父类时 只能抛出相同的异常 或者是他的子集 子类不能抛出父类没有的异常 或者子类不抛出异常
c:如果被重写的方法没有异常抛出 那么子类的方法绝对不可以抛出异常 如果子类方法内有异常发生 那么子类只能try 不能throws
使用异常处理
后续程序需要继续运行就try
后续程序不需要继续运行就throws
8、请说说文件名称过滤器FilenameFilter的作用?
用来过滤文件名
需要重写accept方法
boolean accept(File dir, String name)
测试如果一个指定的文件应包含在文件列表中。
9、请写出最常见到的5个RuntimeException异常。
java.lang.IndexOutOfBoundsException 数组角标越界异常
java.lang.NullPointerException 空指针异常
java.lang.ClassNotFoundException 指定的类找不到
java.lang.ClassCastException 数据类型转换异常
java.lang.InstantiationException 实例化异常
B:看程序写结果(写出自己的分析理由),程序填空,改错,看程序写结果。
1、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因
public class Test {
public static void main(String[] args) {
try {
String s = "12345";
Integer in = s;
System.out.println(in);
} catch (ClassCastException e) {
System.out.println("ClassCastException ");
}
System.out.println("over");
}
}
//将Integer in = s;改为
//Integer in = Integer.parseInt(s);
//String类型不能直接转换为Integer类型
C:编程题
1、编写程序,完成下面的需求,并测试
需求:从银行取钱,发现钱不够,通过自定义异常给出提示。
public class Homework01 {
public static void main(String[] args) {
//需求:从银行取钱,发现钱不够,通过自定义异常给出提示。
//总金额
int money = 100;
//需要取出的金额
int getMoney = 101;
if ((money -= getMoney) >= 0) {
System.out.println("余额=" + money + "元");
} else {
throw new MoneyException("余额不足");
}
}
}
//自定义了金额异常
class MoneyException extends RuntimeException {
public MoneyException(String message) {
super(message);
}
}
2、编写程序,完成下面的需求,并测试
需求:判断D盘指定目录下是否有后缀名.jpg的文件,如果有,就输出该文件名称
public class Homework02 {
public static void main(String[] args) {
File file = new File("E:\\Test");
//获取指定目录下的文件
File[] files = file.listFiles();
for (File file1 : files) {
//判断名字结尾为.jpg的文件
if (file1.getName().endsWith(".jpg")){
System.out.println(file1);
}
}
}
}
3、编写程序,完成下面的需求,并测试
需求:采用文件名称过滤器方式,判断D盘指定目录下是否有后缀名.jpg的文件,如果有,就输出该文件绝对路径。
public class Homework03 {
public static void main(String[] args) {
File file = new File("E:\\Test");
//通过过滤器 过滤后缀名.jpg的文件
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(".jpg");
}
});
//遍历文件名
for (File file1 : files) {
System.out.println(file1.getAbsolutePath());
}
}
}
4、编写程序,完成下面的需求,并测试
需求: 修改指定目录下 所有文件的名称
如:
E:\resource\各种专治\[www-itcast-cn]专治各种疼痛01.mp4
E:\resource\各种专治\[www-itcast-cn]专治各种疼痛02.mp4
E:\resource\各种专治\[www-itcast-cn]专治各种疼痛03.mp4
修改成
E:\resource\各种专治\专治各种疼痛01.mp4
E:\resource\各种专治\专治各种疼痛02.mp4
E:\resource\各种专治\专治各种疼痛03.mp4
public class Homework04 {
public static void main(String[] args) {
File file = new File("E:\\Test");
//通过过滤器 过滤后缀名.jpg的文件
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(".jpg");
}
});
//遍历
for (File f : files) {
//修改名字内容
String replace = f.getName().replace(".jpg", ".png");
//通过renameTo方法 路径相同则为更改名字
f.renameTo(new File("E:\\Test\\" + replace));
}
System.out.println("改名完成");
}
}
5 、删单级非空目录
public class Homework05 {
public static void main(String[] args) {
//删单级非空目录
File file = new File("E:\\Test");
File[] files = file.listFiles();
for (File f : files) {
f.delete();
}
file.delete();
System.out.println("删除成功");
}
}
6 、递归删除多级文件夹
public class Homework05 {
public static void main(String[] args) {
//递归删除多级文件夹
//判断要删除的文件夹
String directory = "E:\\Test";
File file = new File(directory);
//使用递归 一直判断该文件夹是否为空然后删除
deleteFile(file);
System.out.println("删除完成");
}
private static void deleteFile(File file) {
//文件数组
File[] files = file.listFiles();
//遍历文件
for (File f : files) {
//如果是文件 就直接删除
if (f.isFile()) {
f.delete();
} else {
//如果是文件夹 先判断是否为空
//若为空则删除 否则递归
//直到找到空文件夹 或者 文件夹中只有文件才停止
deleteFile(f);
f.delete();
}
}
//删除最外层的文件夹
file.delete();
}
}
7 、判断多级文件夹下有没有.jpg结尾的文件,如果有把后缀名 .jpg 文件改为.png
//可比较编程题4
public class Homework07 {
public static void main(String[] args) {
//判断多级文件夹下有没有.jpg结尾的文件,如果有把后缀名 .jpg 文件改为.png
File file = new File("E:\\Test");
setFile(file);
System.out.println("修改完成");
}
private static void setFile(File file) {
//文件数组
File[] files = file.listFiles();
//遍历文件数组
for (File f : files) {
//判断 将.jpg结尾的文件修改为.png结尾
if (f.isFile() && f.getName().endsWith(".jpg")) {
String replace = f.getName().replace(".jpg", ".png");
//通过renameTo来修改文件名字
f.renameTo(new File(file.getAbsolutePath() + "\\" + replace));
} else if (f.isDirectory()) {
//若是目录 就继续往里面找 直到找到最后一个目录为止
setFile(f);
}
}
}
}
8、复制单级文件夹
public class Homework08 {
public static void main(String[] args) {
//数据源 从哪里来的文件夹
File source = new File("E:\\Test");
//数据目的 到哪里去的文件夹
File target = new File("E:\\Demo", source.getName());
//创建一个与数据源目录名字相同的目录
//如果存在该目录就不在创建
if (!target.exists()) {
target.mkdirs();
}
//遍历数据源的文件
File[] sourceFiles = source.listFiles();
for (File sourceFile : sourceFiles) {
//获取数据源文件夹中的所有文件名字
String sourceFileName = sourceFile.getName();
//创建一个新的目的文件 文件名与数据源文件名相同 路径与数据目的一致
File targetFile = new File(target.getAbsolutePath(), sourceFileName);
//通过IO流复制文件
copyFile(sourceFile, targetFile);
}
}
private static void copyFile(File sourceFile, File targetFile) {
//字节流的文件拷贝
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream(sourceFile);
out = new FileOutputStream(targetFile);
byte[] bytes = new byte[1024];
int lengthBytes = 0;
while ((lengthBytes = in.read(bytes)) != -1) {
out.write(bytes, 0, lengthBytes);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
9、复制多级文件夹
public class Homework09 {
public static void main(String[] args) {
//复制多级文件夹
File source = new File("E:\\Test");
File target = new File("E:\\Demo");
copyDir(source,target);
}
private static void copyDir(File source, File target) {
target = new File(target,source.getName());
target.mkdirs();
File[] sourceFiles = source.listFiles();
for (File sourceFile : sourceFiles) {
if (sourceFile.isFile()){
File targetFile = new File(target, sourceFile.getName());
copyFile(sourceFile,targetFile);
}
if (sourceFile.isDirectory()){
copyDir(sourceFile,target);
}
}
}
private static void copyFile(File sourceFile, File targetFile) {
//字节流的文件拷贝
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream(sourceFile);
out = new FileOutputStream(targetFile);
byte[] bytes = new byte[1024];
int lengthBytes = 0;
while ((lengthBytes = in.read(bytes)) != -1) {
out.write(bytes, 0, lengthBytes);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}