作者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://webptt.com/cn.aspx?n=bbs/java/M.1400847290.A.3D8.html
1F:→ whitebase:恩我大概知道那个逻辑是错误的,但那样简单的表达比较容 05/24 02:05
2F:→ whitebase:易表达我要做的,打一长串人家反而很难知道我要干嘛 05/24 02:08
3F:推 whitebase:所以同学,你有方法可以抓传说中的某个@吗,仅考虑java 05/24 02:12
4F:→ Killercat:String.split()分行以後丢到StringBuffer重组 05/24 05:04
5F:→ Killercat:spilt要拿什麽当分隔字元要看文件来源 05/24 05:08
6F:→ Killercat:spilt完以後的String[]理论上就是你要的「行」 05/24 05:10
7F:→ Killercat:附带一提 可以挑战在streaming下做这件事情喔 :D 05/24 06:14