2013-03-19 50 views
-1

我想写一个程序,需要我从文件中读取文本。在做研究时,我发现这个代码完全符合我需要的代码:这段java代码到底在干什么?

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

当您尝试运行它时发生了什么? – Reimeus 2013-03-19 01:57:47

+2

如果你不知道它的作用,你怎么知道这段代码确实需要做什么? – John3136 2013-03-19 01:59:07

+1

当我运行它时,它逐行输出文本文件的内容,这正是我所需要的程序。我不明白它是如何工作的。 – user2184665 2013-03-19 01:59:34

回答

1

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


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

5

你明白之后该程序的功能(这是很重要的,这些是任何Java程序员基本概念,希望有人将填补),这里是我会做什么来改善它:

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

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

  • 创建Reader时指定明确的字符集。否则你的程序将不能在不同的计算机上移植。

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

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

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

  • 将代码从文件读取到自己的方法中。让它返回一个String。之后你对该字符串所做的操作与此方法无关。

+0

这是有帮助的建议。我还补充说,您可以在Google中搜索每个类,并会找到一种称为JavaDoc的页面(通常在docs.oracle.com中),详细描述每个类。一次查一个,直到你理解每一个。您将从权威来源快速学习。 – phatfingers 2013-03-19 02:10:16

+0

@phatfingers +1对使用Google寻找Javadoc的建议。这也正是我所做的,即使任何适当的IDE将Javadoc捆绑在一起,并且可以在将鼠标悬停在方法等上时显示它。 JDK的文档非常好。找一个方便阅读的方法。 – Thilo 2013-03-19 02:12:06