作者Killercat (殺人貓™)
看板java
標題Re: [問題] 寫入檔案,有辦法寫入某行後方接續寫入?
時間Fri May 23 20:14:48 2014
※ 引述《whitebase (finn)》之銘言:
: 各位大大好,
: 想請問一下關於寫檔,
: 是可以在不覆蓋的情況下接續往下寫入,
: 但有辦法辦到整個檔案以寫入完備畢後,
: 接續的往某一行的後方寫嗎?
: 範例如下:
: 123
: 456
: 789
: 原檔案長這樣,
: 有辦法改成:
: 123
: 456ABC
: 789
: 這個樣子嗎?可接在某一行之後,而不是只接在最後一行之後
這個我有點懷疑你有一個典型的觀念錯誤
事實上這檔案並不是長個如你所想的這樣
而是長得比較像這樣123@456@789
他其實是一個plain的, linear的結構
並沒有「行」這種概念
"@"這個東西在linux, unix跟windows各用不同的兩個位元表示
Windows底下是\r\n Linux底下是\n而BSD系卻是\r
不過不管他是什麼,事實上「行」的概念是不存在的
所以「接在某行後面的操作」其實真正的意思是
「找出第幾個@,然後把一串字元放在他前面」
這顯然並不是普通檔案API會幫你做的事情
不過既然有邏輯,代表他實際上也做的到
這也是一個相當有名的棘手問題,因為在跨平台的時候每個平台"@"都不太一樣
這可以當作java練習題來試試看
噢對,差點忘了,unicode也是可以來參戰的 :D
不過java應該交給系統處理就可以了...
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.169.167.26
※ 文章網址: http://www.ptt.cc/bbs/java/M.1400847290.A.3D8.html
→ whitebase:恩我大概知道那個邏輯是錯誤的,但那樣簡單的表達比較容 05/24 02:05
→ whitebase:易表達我要做的,打一長串人家反而很難知道我要幹嘛 05/24 02:08
推 whitebase:所以同學,你有方法可以抓傳說中的某個@嗎,僅考慮java 05/24 02:12
→ Killercat:String.split()分行以後丟到StringBuffer重組 05/24 05:04
→ Killercat:spilt要拿什麼當分隔字元要看文件來源 05/24 05:08
→ Killercat:spilt完以後的String[]理論上就是你要的「行」 05/24 05:10
→ Killercat:附帶一提 可以挑戰在streaming下做這件事情喔 :D 05/24 06:14