黑马程序员_Java(异常类,file类,递归,字节流)

来源:互联网 发布:如何制作淘宝详情图 编辑:程序博客网 时间:2024/05/16 18:51
------- android培训、java培训、期待与您交流! ----------
在合适的时间做合适的事,越努力越幸福!
1:异常
(1)程序出现的不正常的情况。
(2)异常的体系
Throwable
|--Error 严重问题,我们不处理。
|--Exception
|--|--RuntimeException 运行期异常,我们需要修正代码
|--|--非RuntimeException 编译期异常,必须处理的,否则程序编译不通过
(3)异常的处理:
A:JVM的默认处理
把异常的名称,原因,位置等信息输出在控制台,但是程序不能继续执行了。
B:自己处理
a:try...catch...finally
自己编写处理代码,后面的程序可以继续执行
b:throws
把自己处理不了的,在方法上声明,告诉调用者,这里有问题
(4)面试题
A:编译期异常和运行期异常的区别?
编译期异常 必须要处理的,否则编译不通过
运行期异常 可以不处理,也可以处理
B:throw和throws是的区别
throw:
在方法体中,后面跟的是异常对象名,并且只能是一个
throw抛出的是一个异常对象,说明这里肯定有一个异常产生了
throws:
在方法声明上,后面跟的是异常的类名,可以是多个
throws是声明方法有异常,是一种可能性,这个异常并不一定会产生
(5)finally关键字及其面试题
A:finally用于释放资源,它的代码永远会执行。特殊情况:在执行到finally之前jvm退出了
B:面试题
a:final,finally,finalize的区别?
b:如果在catch里面有return,请问finally还执行吗?如果执行,在return前还是后
会,前。

C:异常处理的变形
try...catch...finally
try...catch...
try...catch...catch...
try...catch...catch...fianlly
try...finally
(6)自定义异常
继承自Exception或者RuntimeException,只需要提供无参构造和一个带参构造即可
(7)异常的注意实现
A:父的方法有异常抛出,子的重写方法在抛出异常的时候必须要小于等于父的异常
B:父的方法没有异常抛出,子的重写方法不能有异常抛出
C:父的方法抛出多个异常,子的重写方法必须比父少或者小
public class FinallyDemo {public static void main(String[] args) {String s = "2014-11-20";SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date d = null;try {// System.out.println(10 / 0);d = sdf.parse(s);} catch (ParseException e) {e.printStackTrace();System.exit(0);} finally {System.out.println("这里的代码是可以执行的");}System.out.println(d);}}



2:File
(1)IO流操作中大部分都是对文件的操作,所以Java就提供了File类供我们来操作文件
(2)构造方法
(3)File类的功能
A:创建功能
public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了
public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来
B:删除功能
public boolean delete()删除功能
C:重命名功能
public boolean renameTo(File dest)重命名功能
D:判断功能
public boolean isDirectory():判断是否是目录
public boolean isFile():判断是否是文件
public boolean exists():判断是否存在
public boolean canRead():判断是否可读
public boolean canWrite():判断是否可写
public boolean isHidden():判断是否隐藏
E:获取功能
public String getAbsolutePath():获取绝对路径
public String getPath():获取相对路径
public String getName():获取名称
public long length():获取长度。字节数
public long lastModified():获取最后一次的修改时间,毫秒值

F:高级获取功能
public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组

G:过滤器功能

(4)案例:
A:输出指定目录下指定后缀名的文件名称
 * 判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称 *  * 分析: * A:封装e判断目录 * B:获取该目录下所有文件或者文件夹的File数组 * C:遍历该File数组,得到每一个File对象,然后判断 * D:是否是文件 * 是:继续判断是否以.jpg结尾 * 是:就输出该文件名称 * 否:不搭理它 * 否:不搭理它 */public class FileDemo {public static void main(String[] args) {// 封装e判断目录File file = new File("e:\\");// 获取该目录下所有文件或者文件夹的File数组File[] fileArray = file.listFiles();// 遍历该File数组,得到每一个File对象,然后判断for (File f : fileArray) {// 是否是文件if (f.isFile()) {// 继续判断是否以.jpg结尾if (f.getName().endsWith(".jpg")) {// 就输出该文件名称System.out.println(f.getName());}}}}}

B:批量修改文件名称
 * 需求:把E:\评书\三国演义下面的视频名称修改为 * 00?_介绍.avi *  * 思路: * A:封装目录 * B:获取该目录下所有的文件的File数组 * C:遍历该File数组,得到每一个File对象 * D:拼接一个新的名称,然后重命名即可。 */public class FileDemo {public static void main(String[] args) {// 封装目录File srcFolder = new File("E:\\评书\\三国演义");// 获取该目录下所有的文件的File数组File[] fileArray = srcFolder.listFiles();// 遍历该File数组,得到每一个File对象for (File file : fileArray) {// System.out.println(file);// E:\评书\三国演义\三国演义_001_[评书网-今天很高兴,明天就IO了]_桃园三结义.avi// 改后:E:\评书\三国演义\001_桃园三结义.aviString name = file.getName(); // 三国演义_001_[评书网-今天很高兴,明天就IO了]_桃园三结义.aviint index = name.indexOf("_");String numberString = name.substring(index + 1, index + 4);// System.out.println(numberString);// int startIndex = name.lastIndexOf('_');// int endIndex = name.lastIndexOf('.');// String nameString = name.substring(startIndex + 1, endIndex);// System.out.println(nameString);int endIndex = name.lastIndexOf('_');String nameString = name.substring(endIndex);String newName = numberString.concat(nameString); // 001_桃园三结义.avi// System.out.println(newName);File newFile = new File(srcFolder, newName); // E:\\评书\\三国演义\\001_桃园三结义.avi// 重命名即可file.renameTo(newFile);}}}

3:递归
(1)方法定义中调用方法本身的现象
举例:老和尚给小和尚讲故事,我们学编程
(2)递归的注意事项;
A:要有出口,否则就是死递归
B:次数不能过多,否则内存溢出
C:构造方法不能递归使用
(3)递归的案例:
A:递归求阶乘
方法图解:


public class DiGuiDemo {public static void main(String[] args) {int jc = 1;for (int x = 2; x <= 5; x++) {jc *= x;}System.out.println("5的阶乘是:" + jc);System.out.println("5的阶乘是:"+jieCheng(5));}/* * 做递归要写一个方法: * 返回值类型:int * 参数列表:int n * 出口条件: * if(n == 1) {return 1;} * 规律: * if(n != 1) {return n*方法名(n-1);} */public static int jieCheng(int n){if(n==1){return 1;}else {return n*jieCheng(n-1);}}}


4:IO流(掌握)
(1)IO用于在设备间进行数据传输的操作
(2)分类:

注意:
a:如果我们没有明确说明按照什么分,默认按照数据类型分。
b:除非文件用windows自带的记事本打开我们能够读懂,才采用字符流,否则建议使用字节流。
(3)FileOutputStream写出数据
A:操作步骤
a:创建字节输出流对象
b:调用write()方法
c:释放资源

B:代码体现:
FileOutputStream fos = new FileOutputStream("fos.txt");

fos.write("hello".getBytes());

fos.close();

C:要注意的问题?
a:创建字节输出流对象做了几件事情?
b:为什么要close()?
c:如何实现数据的换行?
d:如何实现数据的追加写入?
(4)FileInputStream读取数据
A:操作步骤
a:创建字节输入流对象
b:调用read()方法
c:释放资源

B:代码体现:
FileInputStream fis = new FileInputStream("fos.txt");

//方式1
int by = 0;
while((by=fis.read())!=-1) {
System.out.print((char)by);
}

//方式2
byte[] bys = new byte[1024];
int len = 0;
while((len=fis.read(bys))!=-1) {
System.out.print(new String(bys,0,len));
}

fis.close();

(5)案例:2种实现
A:复制文本文件
B:复制图片
C:复制视频
(6)字节缓冲区流
A:BufferedOutputStream
B:BufferedInputStream

5:字符流
IO流分类
字节流:
InputStream
FileInputStream
BufferedInputStream
OutputStream
FileOutputStream
BufferedOutputStream
案例体现:
public class CopyMp4Demo {public static void main(String[] args) throws IOException {long start = System.currentTimeMillis();// method1("e:\\哥有老婆.mp4", "copy1.mp4");// method2("e:\\哥有老婆.mp4", "copy2.mp4");// method3("e:\\哥有老婆.mp4", "copy3.mp4");method4("e:\\哥有老婆.mp4", "copy4.mp4");long end = System.currentTimeMillis();System.out.println("共耗时:" + (end - start) + "毫秒");}// 高效字节流一次读写一个字节数组:public static void method4(String srcString, String destString)throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcString));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destString));byte[] bys = new byte[1024];int len = 0;while ((len = bis.read(bys)) != -1) {bos.write(bys, 0, len);}bos.close();bis.close();}// 高效字节流一次读写一个字节:public static void method3(String srcString, String destString)throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcString));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destString));int by = 0;while ((by = bis.read()) != -1) {bos.write(by);}bos.close();bis.close();}// 基本字节流一次读写一个字节数组public static void method2(String srcString, String destString)throws IOException {FileInputStream fis = new FileInputStream(srcString);FileOutputStream fos = new FileOutputStream(destString);byte[] bys = new byte[1024];int len = 0;while ((len = fis.read(bys)) != -1) {fos.write(bys, 0, len);}fos.close();fis.close();}// 基本字节流一次读写一个字节public static void method1(String srcString, String destString)throws IOException {FileInputStream fis = new FileInputStream(srcString);FileOutputStream fos = new FileOutputStream(destString);int by = 0;while ((by = fis.read()) != -1) {fos.write(by);}fos.close();fis.close();}}


字符流:
Reader
FileReader
BufferedReader
Writer
FileWriter
BufferedWriter
0 0
原创粉丝点击