Java作业09-异常
6. 为如下代码加上异常处理
byte[] content = null;
FileInputStream fis = new FileInputStream("testfis.txt");
int bytesAvailabe = fis.available();//获得该文件可用的字节数
if(bytesAvailabe>0){
content = new byte[bytesAvailabe];//创建可容纳文件大小的数组
fis.read(content);//将文件内容读入数组
}
System.out.println(Arrays.toString(content));//打印数组内容
6.1 改正代码,并增加如下功能。当找不到文件时,需提示用户找不到文件xxx,请重新输入文件名,然后尝试重新打开。 如果是其他异常则提示打开或读取文件失败!。
注1:里面有多个方法均可能抛出异常。
功能2:需要添加finally关闭文件。无论上面的代码是否产生异常,总要提示关闭文件ing。如果关闭文件失败,提示关闭文件失败!
代码改造:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
byte[] content = null;
FileInputStream fis = null;
while (true) {
String file = sc.next();
try {
fis = new FileInputStream(file);
int bytesAvailabe = fis.available();// 获得该文件可用的字节数
if (bytesAvailabe > 0) {
content = new byte[bytesAvailabe];// 创建可容纳文件大小的数组
fis.read(content);// 将文件内容读入数组
}
System.out.println(Arrays.toString(content));// 打印数组内容
} catch (FileNotFoundException e) {
System.out.println("找不到文件 " + file + ",请重新输入文件名");
} catch (Exception e) {
System.out.println("打开或读取文件失败!");
} finally {
try {
System.out.println("关闭文件ing");
fis.close();
} catch (Exception e) {
System.out.println("关闭文件失败!");
}
}
}
}
}
6.2 结合题集6-2代码,要将什么样操作放在finally块?为什么?使用finally关闭资源需要注意一些什么?
将始终需要执行的代码放在finally块中。因为不论是否发生异常,finally块中的代码都会被执行。使用finally块关闭资源时也有可能发生异常,要对其作try-catch捕获处理。
6.3 使用Java7中的try-with-resources来改写上述代码实现自动关闭资源。简述这种方法有何好处?
使用try-with-resources改写后:
byte[] content = null;
try(FileInputStream fis = new FileInputStream("testfis.txt")){
int bytesAvailabe = fis.available();//获得该文件可用的字节数
if(bytesAvailabe>0){
content = new byte[bytesAvailabe];//创建可容纳文件大小的数组
fis.read(content);//将文件内容读入数组
}
}catch(Exception e){
e.printStackTrace();
}
System.out.println(Arrays.toString(content));
好处:简化代码,在try语句块执行结束后,自动调用close()函数,自动关闭资源。
7. 读取文件并组装对象(文件ReadFileUsingScanner.java)
7.1 给出关键代码(需出现你的学号)。额外要求:捕获异常时,将错误的信息按照出错原因:行号:该行内容格式输出。
关键代码
import java.io.File;
import java.io.FileNotFoundException;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class ReadFileUsingScanner {
public static <User> void main(String[] args) throws FileNotFoundException {
Scanner in = new Scanner(new File("身份证号.txt"));//为myfile.txt这个File创建一个扫描器in
int n = in.nextInt();
while (in.hasNextLine()) {
String line = in.nextLine();// 读出myfile.txt的下一行
n++;
@SuppressWarnings("resource")
Scanner lineScanner = new Scanner(line);// 为每一行建立一个扫描器
lineScanner.useDelimiter(" ");// 使用空格作为分隔符
try {
String name = lineScanner.next();// 姓名
String id = lineScanner.next();// 身份证号
String gender = lineScanner.next();// 性别
String age = lineScanner.next();// 年龄
String address = lineScanner.next();// 地址
while (lineScanner.hasNext()) {// 谨防地址只有一段
address += lineScanner.next();
}
System.out.println(name+id+gender+age+address);
} catch (NoSuchElementException e) {
System.out.println("错误原因:"+ e + "行号:"+n+"该行内容为:" + line);
}
}
in.close();
}
}
7.2 如果文件有上万行文本,出错的信息可能有很多行,如果将出错信息直接输出到控制台容易被忽略,请问如何解决?
方法:将所有出错信息存入文本文件后输出。
Java作业09-异常的更多相关文章
- 初识Java作业
初识Java作业 一. 填空题 Java技术按照用途不同分为三大版本,分别是JavaSE. javaEE 和JavaMe Java虚拟机就是一个虚拟的用于执行 .class ...
- 夯实Java基础系列10:深入理解Java中的异常体系
目录 为什么要使用异常 异常基本定义 异常体系 初识异常 异常和错误 异常的处理方式 "不负责任"的throws 纠结的finally throw : JRE也使用的关键字 异常调 ...
- Core Java 总结(异常类问题)
所有代码均在本地编译运行测试,环境为 Windows7 32位机器 + eclipse Mars.2 Release (4.5.2) 2016-10-17 整理 下面的代码输出结果是多少?为什么?并由 ...
- 【Java心得总结二】浅谈Java中的异常
作为一个面向对象编程的程序员对于 下面的一句一定非常熟悉: try { // 代码块 } catch(Exception e) { // 异常处理 } finally { // 清理工作 } 就是面向 ...
- 第五次Java作业
作业一: 文件显示列表框. 增加了下拉式组合框,text区域设置颜色为红色. import javax.swing.*; import java.awt.*; import java.io.File; ...
- Atitit 跨平台异常处理(2)--------异常转换 -----java c# js异常对象结构比较and转换
Atitit 跨平台异常处理(2)--------异常转换 -----java c# js异常对象结构比较and转换 { "@type":"java.lang.Runti ...
- 关于java中的异常问题 1
1.首先参考一下关于java异常处理方面的知识 查看博客http://lavasoft.blog.51cto.com/62575/18920/ 这里介绍的很好,下面从中学习到一些东西,摘抄如下: 1. ...
- Java中的异常-Throwable-Error-Exception-RuntimeExcetpion-throw-throws-try catch
今天在做一个将String转换为Integer的功能时,发现Integer.parseInte()会抛出异常NumberFormatException. 函数Integer.parseInt(Stri ...
- Java throw:异常的抛出怎么回事
到目前为止,你只是获取了被Java运行时系统抛出的异常.然而,程序可以用throw语句抛出明确的异常.Throw语句的通常形式如下: throw ThrowableInstance;这里,Thr ...
- [改善Java代码] 提倡异常的封装
JavaAPI提供的异常都是比较低级别的,低级别是指只有开发人员才能看懂的异常.而对于终端用户来说基本上就是天书,与业务无关,是纯计算机语言的描述. 异常封装的三方面的好处: 1)提高系统的友好性 ...
随机推荐
- Configuration 中无法自动注入依赖于component的bean
出现问题时我这样使用依赖注入 @Configuration public class WebServiceConfig { @Autowired private IMessageWebService ...
- 亚马逊VPS
添加用户: 第一步 注册亚马逊云(已注册直接进入第二步)1.开始前需要准备好:有外币支付功能的信用卡一张(注册需要,不扣钱).Email地址.电话(手机更方便一些)2.访问 https://amazo ...
- 关于Vue的Render的讲解
首先我们传统的对于DOM的操作基本上都是通过js直接的获取一个节点,然后对DOM进行增加或者是删除.而Vue的Render这个函数是通过js虚拟的添加dom节点,然后虚拟的添加到html节点上去. 算 ...
- hive 学习系列二(数据库的创建删除修改) 拿走,不谢。
database 相当于一个目录或者命名空间,用来更好地进行表的管理 在hdfs 的目录位置大致如下: [root@iZbp12vtv76y9q3d633bh6Z /]# hadoop fs -ls ...
- UVa Problem 100 The 3n+1 problem (3n+1 问题)
参考:https://blog.csdn.net/metaphysis/article/details/6431937 #include <iostream> #include <c ...
- oracle杀死锁表的进程(转发+合并+自己实践)
之一: Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作 (1)锁表查询的代码有以下的形式:select count(*) from v$locked_object;sel ...
- centos下搭建svn服务器端/客户端
1.安装 yum install subversion httpd mod_dav_svn 2.创建仓库存储代码 mkdir /var/repos svnadmin create /var/repos ...
- javascript 自定义发布与订阅
//声明一个类,与普通的类的声明不一样, function Girl() { //将类的事件声明成一个私有的属性,里面是一个对象 this._events = {} } /* { "失恋&q ...
- HI2115软件开发板V150版本AT+NSOST指令
1. 在HI2115里面,由于内存空间比较大,所以支持UDP发送指令AT+NSOST的分包 ret = sendto(socket, seq_num, data_string, length, msg ...
- LARK BOARD开发板试用第一篇-上电测试学习
1. 先看下板子外观,做工很不错 2. 主芯片的型号是,SoC 为 Cyclone V SX 系列的 5CSXFC6D6F31,不仅在芯片中包含传统的 FPGA 架构,还集成了基于 ARM Corte ...