Java問題
假設文件有兩行。
首行
預備之物
然後循環讀取兩次,第壹次s賦給readContent,readContent的值為“第壹行”,然後循環,讀取第二行,再次賦值,那麽readContent就會變成“第二行”,第壹行的值就丟失了;
這裏StringBuff的作用是將讀取的內容連接成壹個字符串;
但是,這裏的例子有問題,但問題不在StringBuffer上。在S變量上,S的中間兩步是不必要的,循環直接改成如下形式:
刪除s.getBytes()和新字符串。
另外,除了上面的問題,我們來總結壹下這段代碼的問題:
1.文件資源尚未釋放。
2.在不涉及多線程的情況下,字符串拼接應該使用StringBuilder類而不是StringBuffer,因為StringBuilder更快(但StringBuilder線程不安全,StringBuffer線程安全);
3.異常處理有問題。如果有IO異常,返回異常信息的字符串?那麽如何區分這個字符串是異常的還是從文件中讀取的呢?妳應該直接聲明壹個異常,而不是返回壹個字符串,並拋出它,直到能夠處理它的頂層程序能夠處理它。
基於以上幾點,修改代碼如下:
註意第27行,聲明這個方法可能拋出壹個IOException異常,這個異常將由主程序稍後處理。另外,註意第30行。創建InputStreamReader時,您將文件編碼指定為utf8以避免亂碼。如果您的文件存儲其他編碼類型,將出現亂碼。
調用代碼如下:
getContent函數調用主程序。
請註意,18和21行分別處理正常和異常情況。當讀取異常時,將調用21行來打印異常信息。
整體代碼如下:
所有代碼
接下來,我們來看看代碼執行。
1.當我們要讀取的文件不存在時,執行結果如下:
當我們要讀取的文件不存在時,就會拋出異常。
看,當文件不存在時,會拋出壹個異常,由異常處理程序捕獲並打印出來。可以看到哪壹行代碼是錯的[getContent(App.java:29)],說明App.java文件中的getContent方法是錯的,文件的29行是錯的。
2.正常情況下呢?當然,輸出文件的內容,我們在“D:\\file.txt”中放壹個包含以下內容的文件:
要讀取的文件內容
實施結果如下:
正常情況下,輸出文件的內容。
最後,不知道妳看的是什麽書,是不是教材,感覺質量不高。下面推薦幾本書給妳買下來看看:
1、頭先java
2、菜鳥教程Java
3、最權威的,自然是Java?語言規範
祝妳學習之路壹帆風順。