对《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))(看上面代码块)作用就是在屏幕打印一个字符,所以一个汉字被当两个输出了,所以就会出现乱码现象了。

0 0