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