2013-03-19 13 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