这个java代码到底在做什么?

时间:2013-03-19 01:56:55

标签: java string file-io

我正在尝试编写一个程序,要求我从文件中读取文本。在进行研究时,我发现这个代码完全符合我的要求:

String string="";

try{

        InputStream ips = new FileInputStream("WORDS.txt"); 
        InputStreamReader ipsr = new InputStreamReader(ips);
        BufferedReader br = new BufferedReader(ipsr);
        String line;
        while ((line=br.readLine())!=null){
            System.out.println(line);
            string+=line+"\n";
        }
        br.close(); 
    }       
    catch (Exception e){
        System.out.println(e.toString());
    }

有人可以解释一下这段代码是如何工作的吗?我是编程新手,我对大部分代码都不熟悉。这不是作业 - 这是我为自己的个人利益而写的一个程序。谢谢。

2 个答案:

答案 0 :(得分:5)

在你理解了程序的功能之后(重要的是,这些是任何Java程序员的基本概念,希望有人会填写),我将采取以下措施来改进它:

  • 根本没有此代码。将文件读入字符串的问题已经解决了。使用Commons IO

  • 不要在循环中使用字符串连接。使用StringBuilder。使用您对所需容量(例如文件大小)的最佳猜测来初始化StringBuilder。

  • 创建Reader时指定显式字符集。否则,您的程序将无法在不同的计算机上移植。

  • 不要先删除换行符然后重新添加它们,除非这确实是你想要的。这可能会更改正在读取的数据(如果原始文件使用不同的换行符方案)。

  • 不要捕获异常并打印它。让它将调用堆栈传播到一段可以处理它的代码。

  • 不要将结果String初始化为空。如果代码完成,String将保存您的数据,否则,您需要null或异常。空字符串只会使查找错误变得更加困难。最好不要初始化String,甚至不要为null。然后你会在这里得到一个很好的编译错误,要求你明确指出在异常的情况下String应该是什么。

  • 将从文件中读取的代码放在自己的方法中。让它返回一个字符串。您以后使用该String执行的操作与此方法无关。

答案 1 :(得分:1)

在较高级别,它逐行读取文件,并构建一个由文件中的字符数据组成的字符串*。


*以不必要的低效方式;循环中的字符串连接几乎总是被StringBuilder的使用替换。