-1

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

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());
    }

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

4

2 回答 2

5

在你理解了程序做了什么之后(这很重要,这些是任何 Java 程序员的基本概念,希望有人会填写),这是我将做的改进它:

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

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

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

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

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

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

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

于 2013-03-19T02:01:34.077 回答
1

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


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

于 2013-03-19T01:59:09.800 回答