对《Java初体验》中代码的再探究
来源:互联网 发布:帝国cms整站模板 编辑:程序博客网 时间:2024/05/17 06:45
昨天,即兴写了一篇博客——《Java初体验》,文章中写了一段代码,即用使用FileReader类、BufferedReader类、FileInputStream类三种方式,从D盘下HelloWorld.java文件中读取全部信息并打印到控制台,异常处理使用try---catch关键字进行捕获并打印相关信息。昨天写的代码中用了很多的try---catch语句。一共用了5个try---catch,今天大家讨论的时候,有人提出用了这么多try---catch就是浪费,使得代码变得冗长,看着也是很乱的。我又查了课本,找了一些资料看,发现我对try---catch语句的理解确实出现了偏差,把代码放在一个try块中是可以的,我们可以使用多个catch块来对每一个异常进行捕捉,当try块中出现一个异常的时候,系统会依次检查每一个catch块,第一个与出现的异常类型所匹配的catch块将被执行,而其他的catch块就会被忽略。所以我对昨天写的代码进行了修改,使用了一个try块和多个catch块。
实验题目
三种方式读文件
实验要求
使用FileReader类、BufferedReader类、FileInputStream类三种方式
从D盘下HelloWorld.java文件中读取全部信息并打印到控制台
异常处理使用try---catch关键字进行捕获并打印相关信息
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class sandu1 {
public static void main(String[] args){
try{
//使用FileReader类读取文件并输出到控制台
FileReader fr = new FileReader("D:/HelloWorld.java");
int i;
System.out.println("\n"+"使用FileReader类读取信息为:");
while ((i=fr.read())!=-1){
System.out.print((char)(i));
}fr.close();
//使用BufferedReader读取文件并输出到控制台
FileReader fr1 = new FileReader("D:/HelloWorld.java");
BufferedReader br = new BufferedReader(fr1);
String s;
s=br.readLine();
System.out.println("\n"+"使用BufferedReader类读出文件信息:");
System.out.print(s);
br.close();
fr1.close();
//使用FileInputStream类读取文件并输出到控制台
FileInputStream fis = new FileInputStream("D:/HelloWorld.java");
System.out.println("\n"+"使用FileInputStream类读出文件信息:");
while((i=fis.read())!=-1){
System.out.print((char)(i));
}
fis.close();
}catch(FileNotFoundException e){
System.out.println("找不到文件所在位置");
}catch (IOException e){
System.out.println("防止输入输出异常发生");
}
}
}
在运行的过程中还有一个有趣的事情,就是在用FileInputStream类读取文件并输出到控制台中,在控制台中文显示的是乱码,而写到文件里面的中文却能正常显示,这是一个怎样的情况呢?通过查找资料终于找到了答案。虽然FileInputStream是字节流,但是字节流没有经过“解码-编码”这个过程,所以不会因为解码和编码使用的编码方式不同而产生错误,事实上,使用字节流能够保证源文件和目标文件是一模一样的,打开文件当然是正常的。而之所以在控制台输出时出现乱码,是因为System.out.print((char)(i))(看上面代码块)作用就是在屏幕打印一个字符,所以一个汉字被当两个输出了,所以就会出现乱码现象了。
- 对《Java初体验》中代码的再探究
- iOS中登录功能的体验探究
- iOS中注册功能的体验探究
- iOS中注册功能的体验探究
- iOS中登录功能的体验探究
- iOS中注册功能的体验探究
- iOS中登录功能的体验探究
- 静态代码扫描中Java资源对象关闭的探究
- Java中String的探究
- 对队列初体验的代码稍加改进
- 对死锁的探究
- 对死锁的探究
- java中数组的反射的探究
- Java中toArray的用法探究
- Java中toArray的用法探究
- Java中toArray的用法探究
- Java中toArray的用法探究
- Java中toArray的用法探究
- cmd命令大全
- java io流的一部分解析
- Java习题4—IO流与异常
- Linux文件系统
- iOS 平板与 Android 平板的交互与动画
- 对《Java初体验》中代码的再探究
- HDU 5438 Ponds(2015ACM长春网络赛+枚举删点+DFS求联通块)
- JAVA String 不可变对象
- 第3周项目1顺序表的基本运算
- STM32点阵
- HDU 5442 Favorite Donut (2015年长春赛区网络赛F题)
- 修改ubuntu终端里面那个提示符
- Oracle数据库安装成功后,忘记解锁账户和设置密码
- noip2006 明明的随机数 (模拟)