Re: [問題] 寫入檔案,有辦法寫入某行後方接續寫入?

作者: Killercat (殺人貓™)   2014-05-23 20:14:48
※ 引述《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應該交給系統處理就可以了...
作者: whitebase (finn)   2014-05-24 02:05:00
恩我大概知道那個邏輯是錯誤的,但那樣簡單的表達比較容
作者: whitebase (finn)   2014-05-24 02:08:00
易表達我要做的,打一長串人家反而很難知道我要幹嘛
作者: whitebase (finn)   2014-05-24 02:12:00
所以同學,你有方法可以抓傳說中的某個@嗎,僅考慮java
作者: Killercat (殺人貓™)   2014-05-24 05:04:00
String.split()分行以後丟到StringBuffer重組
作者: Killercat (殺人貓™)   2014-05-24 05:08:00
spilt要拿什麼當分隔字元要看文件來源
作者: Killercat (殺人貓™)   2014-05-24 05:10:00
spilt完以後的String[]理論上就是你要的「行」
作者: Killercat (殺人貓™)   2014-05-24 06:14:00
附帶一提 可以挑戰在streaming下做這件事情喔 :D

Links booklink

Contact Us: admin [ a t ] ucptt.com