论坛首页 Java企业应用论坛

java开发大文件编辑器的解决方案

浏览 8040 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2010-07-14  
   目前在做一个基于jsyntaxpane的项目,客户要求能够显示和编辑大文件(100M以上),在显示时我采用内存映射和滚动条控制分页处理。编辑时,把被修改的当前页保存在零时文件中,在提交保存时,再操作原始文件进行修改。由于文件里每行数据的数据量不同,所以使用滚动条不好控制每页显示多少行,只能控制显示多少字节,所以这个解决方案有点达不到这个项目的要求。为了界面的美观,又不能添加翻页按钮。所以有点纠结。
   不知各位在这方面有什么好的建议,求经验分享~~
   发表时间:2010-07-14  
可以试试以滚动的方式来显示分页,
0 请登录后投票
   发表时间:2010-07-15  
可以这样做:
用取字节是没错的。
现在假设一页最多可以容纳50行。
比如说,滚动条取到5%
那么就取文件第5%的地方。
然后抛弃掉第一个换行之前的内容,往后取50行内容。
将这个内容显示在页面上,因为一行可能很长,会有多的行,那就不显示。
这时候还要处理:上一行、下一行、上一页、下一页。
所以之前的字节偏移是需要保存下来的。
0 请登录后投票
   发表时间:2010-07-15  
这个你其实可以看下手机上java写的电子书阅读软件是怎么做的,譬如anyview
0 请登录后投票
   发表时间:2010-07-15  
如果是文本文件,按行分割的话,几个思路:
1、按字体和显示区域,如果有自动换行和不换行,measure大小和长宽。
2、如果临时文件对用户屏蔽,修改时,可以使用多个临时文件分片,或是记录操作日志。保存时再统一处理到原始文件。
3、每次操作都尽量只修改影响的上下几行,像eclipse的editor那样。
4、win32 api里提供了直接读取文本文件第几行的快速方法,好像java没有,如果能用jni/jawin/jacob,试一试。

。。。。。。
0 请登录后投票
   发表时间:2010-07-15  
感谢楼上的回答,我觉得现在最大的问题就是按数据行分页,kimmking 说的第四个思路值得考虑,因为我自己做了几个按行分页的方法,性能都太差了(1、给每行行创建索引,2、自己实现读取文件的固定行)。seek()方法却只能定位的字节。我看了下别人用C#实现的大文件编辑器,是按行分块。我对C不是很熟悉,不知道Java代码调用C代码会有哪些问题。。。这个方案实现的难度有多大?
0 请登录后投票
   发表时间:2010-07-15  
你可以先参考下诸如vim开源项目如何处理的,这些读取大文件也是比较快的。
0 请登录后投票
   发表时间:2010-07-15  
其实直接采用按字节分页编辑不是更好?
我想大多数文本编辑器都会是这样的,而不是按行分页吧!
0 请登录后投票
   发表时间:2010-07-15  
xdsnet 写道
其实直接采用按字节分页编辑不是更好?
我想大多数文本编辑器都会是这样的,而不是按行分页吧!

我一开始做的就是按字节分页``但在实际中滚动条不好控制每次滚动显示文字的量,
可能是我考虑的不周全。我了解过几个C#的项目,他们采用的是按行数分块,这样可以固定显示文件的行。。所以我才想到按行分页``
0 请登录后投票
   发表时间:2010-07-16  
    问题是行的定义也是不确定的啊,对行如何显示也是不确定的,这也影响了用滚动条控制的效果。
    当然,你可以考虑用行控制,实际上我也不确定诸如vim是用的那种控制(不过在vim中是可以没有滚动条的:-) ),由你这么一说,我还觉得还真的可能是用的行分页呢!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics