Discussion:
想請問一下有關於檔案的問題..謝謝!!
(时间太久无法回复)
j***@kkcity.com.tw
2007-04-17 17:06:00 UTC
Permalink
以下是我的程式碼

try{
FileReader fr=new FileReader("c:\\軟功夫.txt");
//建立一個名稱為fr的FileReader物件,並且將檔案路徑及檔名傳入
BufferedReader bf=new BufferedReader(fr);
//建立一個名稱為br的BufferedReader物件,並且將fr傳入
String str=null;
String line=null;
int i=0;
while ((line=bf.readLine()) != null)
{
i++ ; //用來算檔案有幾行

System.out.println("line:"+line); //列印出line的值看一看
str=str+line;
System.out.println("str:"+str); //列出str的值看一看
}

System.out.println("檔案共"+i); //算出檔案有幾行
System.out.println("檔案內容"+str); //列出檔案的內容
bf.close();
fr.close();
}
catch (Exception e)
{
System.out.println("Exception happens");
}


ps::
我的檔案是一個簡單的記事本檔案..一開始我enter了5次
然後才開始寫內容


想請問兩個問題..
1..我在while的回圈裡面,如果列出line的值來看看,為什麼都沒顯示任何訊息,
也不會顯示null

2. System.out.println("檔案內容"+str);
這一行我印出檔案內容的時候.為什麼前面會多了一個null的字


3.請問一下bf.close();
fr.close();
這兩行不寫也沒影響,因為我有趣run程式結果.好像都依樣
請問這個有必要關掉嗎,雖然書上都是這樣寫說資料流要關掉
但不關掉會有差嗎..可不可以舉個不關掉但有差別的例子.謝謝!!

--
┌─────◆KKCITY◆─────┐ ★  人人可架站,經營社群聯誼天地  ★
│ bbs.kkcity.com.tw │ 歡迎社團/班系/歌友/藝文創作/公益申請
└──《From:59.104.1.232 》──┘ 到 KKCity 開設自己喜愛的主題BBS站
--
骨頭
2007-04-17 18:54:04 UTC
Permalink
※ 引述《***@kkcity.com.tw ( )》之銘言:
: 以下是我的程式碼
: try{
: FileReader fr=new FileReader("c:\\軟功夫.txt");
: //建立一個名稱為fr的FileReader物件,並且將檔案路徑及檔名傳入
: BufferedReader bf=new BufferedReader(fr);
: //建立一個名稱為br的BufferedReader物件,並且將fr傳入
: String str=null;
//here you set str =null
: String line=null;
: int i=0;
: while ((line=bf.readLine()) != null)
: {
: i++ ; //用來算檔案有幾行
: System.out.println("line:"+line); //列印出line的值看一看
: str=str+line;
// let's see how it work in first time: null + "xxxx"
: System.out.println("str:"+str); //列出str的值看一看
: }
: System.out.println("檔案共"+i); //算出檔案有幾行
: System.out.println("檔案內容"+str); //列出檔案的內容
: bf.close();
: fr.close();
: }
: catch (Exception e)
: {
: System.out.println("Exception happens");
: }
: ps::
: 我的檔案是一個簡單的記事本檔案..一開始我enter了5次
: 然後才開始寫內容
: 想請問兩個問題..
: 1..我在while的回圈裡面,如果列出line的值來看看,為什麼都沒顯示任何訊息,
: 也不會顯示null

因為是 "" , ""和 null的差別應該不需要多說吧 ? :)


你的Enter按鍵觸發的動作可以看作事產生 "\r\n "
而readLine是以 \n (\r也會順便) 做分隔 ,
所以前面你的五下 enter 可以看成 "\r\n\r\n\r\n\r\n\r\n"

所以前面五行的readLine的內容會跟 .split("[\r]?\n")
出來的結果差不多,就是依序出現五個 "" 。

: 2. System.out.println("檔案內容"+str);
: 這一行我印出檔案內容的時候.為什麼前面會多了一個null的字
理由我在前面說明了

一樣是 "" 和 null的誤用

你應該做的是String str= ""
或者是在開始的時候 , 定義str的起始值。

當你在str 還是 null狀態的時候就做 字串加法 的動作 ,
null會被當成字串紀錄。

: 3.請問一下bf.close();
: fr.close();
: 這兩行不寫也沒影響,因為我有趣run程式結果.好像都依樣
: 請問這個有必要關掉嗎,雖然書上都是這樣寫說資料流要關掉
: 但不關掉會有差嗎..可不可以舉個不關掉但有差別的例子.謝謝!!


資料串流有開啟最好就關閉(表示操作結束),
這樣系統也不會浪費資源在維持串流的運行。


(特別是對資料庫而言,一個串流就等於是一個資料庫的連結,忘了關影響會很大,
請想像BBS上有一堆幽靈掛站者的現象,雖然沒在動作卻佔著資源。XD)

另外,寫入的串流如果沒有關閉的話,資料是不會進檔案的。


請養成這個好習慣。:)

--
有些累,
所以語氣稍嫌隨便了些,如果有錯就請諸位大德幫忙指證吧。^^

--
I am a person, and I am always thinking .
Thinking in love , Thinking in life ,
Thinking in why , Thinking in worth.
I can't believe any of what ,
I am just thinking then thinking ,
but worst of all , most of mine is thinking not actioning...

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.27.68

Loading...