Java 学习(20)--异常 / IO 流
异常(Exception)
(1)程序出现的不正常的情况。
(2)异常的体系
Throwable(接口,将异常类对象交给 JVM 来处理)
|--Error 严重问题,我们不处理。(jvm 错误,程序无法处理)
|--Exception 异常 (程序可以处理的异常)
|--RuntimeException (运行期异常,可以通过逻辑判断进行控制,不需要捕获 处理方法:1.try...catch 2.throws)
|-- 其他(受查)异常 (继承自Exception,且不是RuntimeException,必须要捕获)
(3)异常的处理:
A:JVM 的默认处理
当系统发生运行异常时,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:父的方法抛出多个异常 ,子的重写方法必须比父少或者小
IO 流
File
我们要想实现输入输出操作就必须要知道,java在硬盘上的表现形式,也就是说硬盘上面的文件和文件夹在java中有一个专门的
类来表示:File;IO 流操作中大部分都是对文件的操作,所以 Java就提供了 File 类供我们来操作文件
(java类: 成员变量,成员方法,构造方法,成员代码块,成员内部类)
构造方法
A:File file = new File("e:\\demo\\a.txt");// 根据一个路径得到 File 对象
B:File file = new File("e:\\demo","a.txt");// 根据一个目录和一个子文件 / 目录得到 File
对象
C:File file = new File("e:\\demo");
File file2 = new File(file,"a.txt");// 根据一个父 File 对象和一个子文件 / 目录得到 File 对象
1.File(File parent, String child) : 根据一个File对象和一个文件名创建File对象
2.File(String pathname):根据指定的路径创建File对象
3.File(String parent, String child) : 根据一个路径字符串和一个文件名创建File对象
public class FileDemo1 {public static void main(String[] args) throws IOException {File file = new File("d:\\test\\a.txt"); //全路径File file1 = new File("d:\\test", "a.txt"); //真正的路程 , 要创建的文件名 File file1 = new File("d:\\test");File file2 = new File(file1,"a.txt"); //将路径封装到 file 对象里去; //封装好的对象 , 要创建的文件名//以上三种方式实现的效果是一样的System.out.println(file2);}
}
File 类的功能
A:创建功能
public boolean createNewFile() :根据file对象的路径,创建一个硬盘中的文件或路径,
如果没有对应的路径,就会抛出异常 java.io.IOException;
如果该路径下没有对应文件,则创建成功,返回true;
如果该文件已经存在则创建失败,返回false
public boolean mkdir(): 创建一个文件夹,创建成功返回true
如果没有对应的路径,则创建失败,返回false
如果该文件夹已经存在,则创建失败,返回false
public boolean mkdirs() :创建文件夹,如果路径中的文件夹不存在,就一起创建出来
public class FileDemo2 {public static void main(String[] args) throws IOException {File file = new File("d:\\test\\a.txt");System.out.println("createNewFile:" + file.createNewFile());File file = new File("d:\\test\\demo");System.out.println("mkdir:" + file.mkdir());File file1 = new File("d:\\test\\aaa");System.out.println("mkdir:" + file1.mkdir());File file2 = new File("d:\\test\\aaa\\bbb");System.out.println("mkdir:" + file2.mkdir());File file3 = new File("d:\\test\\aaa\\bbb\\ccc");System.out.println("mkdir:" + file3.mkdir());File file = new File("d:\\test\\aaa\\bbb\\ccc");System.out.println("mkdirs:" + file.mkdirs());//说明骑白马的不一定是王子File file = new File("D:\\test\\a.txt");System.out.println("mkdir:" + file.mkdir());}
}
B:删除功能
public boolean delete() :java删除不走回收站,所删除时一定要小心;如果删除时对应的路径名不存在,
则删除失败,返回false;删除此抽象路径名表示的文件或目录。 如果此路径名表示一个目录,则该目录必须为空才能删除。
public class FileDemo3 {public static void main(String[] args) throws IOException {File file = new File("d:\\test\\aaa\\bbb");System.out.println("delete:" + file.delete());}
}
C:重命名功能
public boolean renameTo(File dest) :将File对象对应的路径名改为传入的file对象对应路径名,
如果重命名前后的两个文件不在同一个文件夹下,则该方法有剪切的效果
如果路径名相同,就是改名。
如果路径名不同,就是改名并剪切。
路径以盘符开始:绝对路径 c:\\a.txt
路径不以盘符开始:相对路径 a.txt
public class FileDemo4 {public static void main(String[] args) throws IOException {File file = new File("d:\\test\\lihongxiao.txt");File newFileName = new File("d:\\test\\demo\\weiwei.txt");System.out.println("renameTo:" + file.renameTo(newFileName));File file = new File("aaa.txt");file.createNewFile();//没有写盘符,叫做相对路径,会在项目的根路径下创建File file = new File("aaa\\bbb\\ccc");System.out.println("mkdirs:" + file.mkdirs());// 相对路径}
}
D:判断功能
public boolean isDirectory() :判断是否是文件夹
public boolean isFile() :判断是否是文件
public boolean exists(): 判 断 是 否 存 在
public boolean canRead(): 判 断 是 否 可 读
public boolean canWrite() :判断是否可写
public boolean isHidden() :判断是否隐藏
public class FileDemo5 {public static void main(String[] args) throws IOException {File file = new File("a.txt");File file = new File("ccc");System.out.println("是否文件夹:" + file.isDirectory());File file = new File("aaa");System.out.println("canRead:" + file.canRead());System.out.println("canWrite:" + file.canWrite());File file = new File("aaa");System.out.println("canRead:" + file.canRead());System.out.println("isHidden:" + file.isHidden());}
}
E:获取功能
public String getAbsolutePath() :获取文件的绝对路径
public String getPath() :获取相对路径
public String getName() :获取名称
public long length() :获取长度。字节数
public long lastModified() :获取最后一次的修改时间,毫秒值
public class FileDemo6 {public static void main(String[] args) throws IOException {File file1 = new File("aaa\\bbb\\ccc");file1.mkdirs();File file = new File("aaa\\bbb\\ccc\\weiwei.txt");file.createNewFile();System.out.println("AbsolutePath:----" + file.getAbsolutePath());System.out.println("path:----" + file.getPath());System.out.println("fileName:-----" + file.getName());System.out.println("length:---" + file.length());Date date = new Date(file.lastModified());DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String format = df.format(date);System.out.println(format);}
}
F:高级获取功能
public String[] list() :获取指定目录下的所有文件或者文件夹的名称数组
public File[] listFiles() :获取指定目录下的所有文件或者文件夹的 File数组
public class FileDemo7 {public static void main(String[] args) throws IOException {File file = new File("d:\\");for(String name : file.list()) {System.out.println(name);}File file = new File("d:\\");for(File file1 : file.listFiles()) {System.out.println(file1.getName()+"----"+file1.getAbsolutePath());}}
}
G:过滤器功能
案例:
判断D盘中是否存在后缀名为.png的文件
分析:
1:将D封装到一个File对象中
2:获取D盘下的所有的文件和文件夹
3: 从这些文件和文件夹中根据条件遍历查找满足条件的文件
public class FileDemo8 {public static void main(String[] args) throws IOException {File file = new File("D:\\");File[] sonFiles = file.listFiles();for(File file2 : sonFiles) {String filename = file2.getName();if(filename.endsWith(".png") && file2.isFile()) {System.out.println(filename);}}}
}
方法二:设置条件,查找满足条件的文件
public class FileDemo9 {public static class MyFilter implements FilenameFilter{@Overridepublic boolean accept(File dir, String name) {if(name.endsWith(".png")){return true;}return false;} }public static void main(String[] args) throws IOException {File file = new File("D:\\");MyFilter myFilter = new MyFilter();String[] list = file.list(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {// TODO Auto-generated method stubreturn false;}});for(String name : list) {System.out.println(name);}}
}
总结:输出指定目录下指定后缀名的文件名称
a:先获取所有的,在遍历的时候判断,再输出
b: 先判断,再获取,最后直接遍历输出即可
Java 学习(20)--异常 / IO 流相关推荐
- Java学习——Day13:IO流
6.1 File类 java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关 File 能新建.删除.重命名文件和目录,但 File 不能访问文件内容本身. 如果需要访问文件内容本身, ...
- java学习笔记-初学IO流
目 录 什么是IO IO流的分类 Java中的IO流 java中需要掌握的流:16个 字节流 java.io.FileInputStream(字节输入流) java.io.FileOutputStre ...
- 打怪升级之小白的大数据之旅(二十五)<Java面向对象进阶之IO流三 其他常见流>
打怪升级之小白的大数据之旅(二十五) Java面向对象进阶之IO流三 其他常见流 上次回顾 上一章,我们学习了常用的字节流与字符流,本章,我会将其他的一些常见的流进行分享,IO流很多,我介绍不完,就挑 ...
- 【Java网络编程与IO流】Java之Java Servlet详解
Java网络编程与IO流目录: [Java网络编程与IO流]Java中IO流分为几种?字符流.字节流.缓冲流.输入流.输出流.节点流.处理流 [Java网络编程与IO流]计算机网络常见面试题高频核心考 ...
- java字节流读取文件_字节流读取文件 java的几种IO流读取文件方式
java字节流怎么读取数据 字节流读取数据例子如下: import java.io.File;import java.io.FileInputStream;import java.io.FileNot ...
- Java实现文件写入——IO流(输入输出流详解)
输入输出的重要性: 输入和输出功能是Java对程序处理数据能力的提高,Java以流的形式处理数据.流是一组有序的数据序列,根据操作的类型,分为输入流和输出流. 程序从输入流读取数据,向输出流写入数据. ...
- JAVA学生信息管理系统IO流版
JAVA学生信息管理系统IO流版 1. Student类 public class Student implements Serializable{//学号private int sid;//姓名pr ...
- 【Java网络编程与IO流】Java中IO流分为几种?字符流、字节流、缓冲流、输入流、输出流、节点流、处理流
Java网络编程与IO流目录: [Java网络编程与IO流]Java中IO流分为几种?字符流.字节流.缓冲流.输入流.输出流.节点流.处理流 [Java网络编程与IO流]计算机网络常见面试题高频核心考 ...
- java学习笔记16--I/O流和文件
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input Output)流 IO流用来处理 ...
最新文章
- SQL 中的 AND OR
- java sendmessage_SendMessage()复制/剪切/粘贴WM_COPYDATA 0x004A
- vue 计算属性和data_vue之watch和计算属性computed
- python财务报表预测股票价格_机器学习股票价格预测从爬虫到预测-数据爬取部分...
- codeblocks安装后提示找不到编译器
- 玩转二算法课的笔记-第一章
- 从原理到实践,手把手带你轻松get数仓双集群容灾
- SQL Server2008R无法登录的解决方案(系统文件损坏)1814 18456....不看别后悔,有用请点赞...
- 码农故事:一个辞职创业卖凉皮的程序员
- 【HL7】快速入门 HL7 协议
- AID Learning设置aidcode的启动页面
- qt几种常见的打包安装程序工具
- mars老师Java教程百度网盘,你一定不能错过
- (转帖)如何成长为真正的CCIE,转自WOlf
- python入门学习
- 想在 Ubuntu 上放飞梦想的小黑菜(2)
- 视频教程-手把手实现Java图书管理系统(附源码)-Java
- python线性回归 多因子模型选股思路
- 近三年数字图像处理与数字媒体技术相关的前沿技术研究和应用
- java企业网站源码,模版,有前后台,springmvcSSM