大伙来帮忙啊!(IO问题)

swantt 2006-08-07 10:41:30
圣域
第1节:你还记得我吗
上篇

她从奈何桥上走来,忧伤滑过她的眼神。她问我,你还记得我吗?
我苦涩的笑了。我说我连自己都记不起来了,又怎么会记得你?
我叫洛崖。很多时候我都记不清自己从哪里来,也从来不曾知道自己要往哪里去。在我隐隐的记忆里,冥界好像一天到晚都是黄昏,天空是灰色的,沉沉的似乎快贴到了地面。阴森而刺骨的风在天空中无情的肆虐,将灰喜鹊的哀鸣渲染得更加凄厉和无助。这时我总会努力的去分辨掺杂在其中杜鹃鸟的叫声,它们一遍一遍的喊,不如归去,不如归去。我抬头寻不到它们的踪迹,落寞却涌满了我的眼睛。我不断的问自己我是谁,心如刀割。
我在冥界生活了很久,这种单调的生活让我变得很茫然。在冥界,当那些可怜的鬼魂踏上奈何桥的时候,他们总会回首去思念自己的过去,然后三生石上会刻满他们的前世今生。我知道我不是鬼魂,因为我可以真切的抚摸到自己的身体。我翻遍所有的三生石却找不到关于我的记载。我问孟婆知道我是谁吗?孟婆没有摇头,她的眼神里散落出淡淡的痛苦,然后她转身什么也没有说。
孟婆是冥界最年老的神。她掌管着冥界所有鬼魂的前世今生。每当冥界来了新的鬼魂,孟婆就会走上前去,捧起一碗孟婆汤。然后她会说,喝一碗孟婆汤你就会忘记,不管是快乐还是痛苦。汤冒着热气,摇摆着慢慢上升,朦胧了鬼魂们的脸。我看不清他们喝孟婆汤时脸上的表情,抑或快乐,抑或悲伤。
现在已经是秋末,奈何桥旁边的树光秃秃的,金黄的叶子落满一地。风吹来已经明显有冬天的寒意,一片叶子被风吹起贴到我的脸上,然后又缓缓的盘旋而下。我抬头,看到了她。她走在奈何桥上,美丽淡雅的脸如沐华光,清澈的眼神温柔如水。她的白袍很长,拖在地上,惊动了落在地上的叶子。风把叶子扬起环绕着她,依依不舍。然后我看到她回过头去望着灰色的天空,瀑布般的长发在风中曼舞。转过身的时候她的眼神开始夹杂着忧郁,随着秋风在空中飘荡弥漫。
我回头看到三生石上写着,昭茵,灵界的公主。
孟婆照例捧着孟婆汤走上前去,她说,喝一碗孟婆汤你就会忘记,不管是快乐还是痛苦。
不,我不要喝,我不要忘记。她的声音很凄凉,如秋风的哽咽。我不禁打了个冷颤。然后她看到了我,她问我,你不记得我了吗?
我说我连自己都记不起来了,又怎么会记得你?奈何桥旁的士兵走了过来,说,不管你是谁,到了这里就必须喝下孟婆汤,否则我们将送你到魔界。
我不知道自己第一次喝孟婆汤是在什么时候,以前所有的一切也许就在那一次全部被遗忘了。以后的每个傍晚我都会喝下一碗孟婆汤,但却什么作用也没有了。
她听到士兵的话惊恐的向后退了两步,身形优雅带有余韵,一片叶子在她的眼前缓缓的落下。我说,那你肯定知道我是谁了,你能告诉我吗?
士兵把长矛指向了我的胸膛,铜亮的矛头在秋风中泛着寒光。我笑了。孟婆走过来说,你们退下吧,你们是打不过他的。我一直很奇怪虽然我记不清自己从哪里来,但我却拥有别人无法对抗的幻术和魔法。我常对自己说,幻术是用来骗人的,而魔法是用来杀人的。孟婆每次都摇摇头,她说,幻术有时候骗的是自己,魔法也是可以用来救人的。
所有的士兵都往两边退去,我站在那里看到了忘川河。她踏着轻盈的步伐跟着我,绕过忘川河。忘川河中的水从来不曾恣肆汪洋,它就这样缓缓的流着,淙淙的水声像是贴着肌肤游动,延绵而细腻。我问她,我是谁?
她看着忘川河,眼神恍惚如阳光的斑驳。良久,她说,我是灵界的公主,而你是灵界的驸马。几年前你触怒了天界之王,所以被罚到冥界来赎罪。我知道你喝了孟婆汤,所以你记不起我是谁了。
我曾听孟婆说过,天界是最强大的世界,灵界,人界和冥界都要对天界顶礼膜拜。只有魔界,那个最底层也最黑暗的世界才敢反抗天界,与天界抗衡。
我笑了,她来自灵界,一个美丽的精灵。可是她为什么要骗我呢?如果我真的是灵界的驸马,她又怎么会说是几年前而不说具体的年限呢,因为她不知道。有一种人天生就不会骗人,因为她们骗人的时候眼睛会背叛自己。
她是一个很聪明的女子,因为她知道怎样在一个举目无亲的地方保护自己,所以我并没有揭穿她。我说,那你呢,你为什么要来冥界?


本电子书籍由 〖 TopChn 〗 工作组 收集整理制作,版权归原作者所有


上一页 首页 下一页





友情提示:↑点上面的字体按钮可改变字体的大小
上一页 首页 下一页



圣域
第2节:我到底是谁
她担心的问,你冷吗?
我摇头。我从来就没有告诉过别人我很寂寞,就像一个酒鬼,他只会把酒留在胃里而不是杯中。我的寂寞已经嵌入了我的脊骨,从身世到生活,一节一节的刻在里面。当黑夜袭来时,它会在我心中隐隐作痛,夹杂着琐碎的声响。
我说,你有三天的时间,如果那时候你还不肯喝下孟婆汤的话,冥界的士兵就会把你推入魔界。你去吧,喝了孟婆汤,然后赎完你的罪过回到灵界去吧。说完我把头扭到一边,望向波澜不惊的忘川河,因为我不想看到她痛苦的表情。她的美芳华绝代,从我看到她第一眼开始就深深地烙在我的心中,不许有丝毫亵渎。我不知道自己说的话为什么依然那么冰冷,或许已经无法再改变了。
她低下头默默地沿着忘川河离开,孤单的身影犹如河旁柳树的枝条,一线一线垂落到地上。我转过身去,回到奈何桥,风突然变得很凉。那个傍晚我没有喝孟婆汤,虽然它对我已经没什么作用,但我还是害怕,害怕孟婆汤洗去我的脑海中关于她的记忆。
那天晚上我一直都是醒着的,黑色的风在屋外咆哮嘶喊。我不知道自己是不是应该去帮她。黎明的时候我起身,在冥界随意走动。透过依稀的光线,我看到了她。她站在冥界的轮回殿外,看着从人界渗透下来的亮光发呆。她的脸明亮而且柔和,但却明显有哭过的痕迹。那一刻,我突然说,你想离开这里吗?


本电子书籍由 〖 TopChn 〗 工作组 收集整理制作,版权归原作者所有


上一页 首页 下一页





友情提示:↑点上面的字体按钮可改变字体的大小
上一页 首页 下一页


-------------------------------------------------------------------

以上是我截取的一本小说的部份章节(可能会有几百章节)。这些都是保存在一个文件里的(1.txt)。现在我的目的是截取每一章节标题如(第1节:你还记得我吗 ,第2节:我到底是谁)等以及每章节相对应的每章节内容,然后相对应的挺入到数据表中。也就是说如果有100章节,就要挺入100行记录(主要是获取章节标题以及相对应的内容)到表中。

大伙帮我想想办法,我现在试了好久,好几次机子都快死机了。
急啊!再不写出来估计没脸见老板啦!
...全文
461 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigc2000 2006-08-10
  • 打赏
  • 举报
回复
http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/nio/MappedByteBuffer.html

nio,可以满足你
husl 2006-08-10
  • 打赏
  • 举报
回复
楼主要厚到,不要让我白忙哦!
husl 2006-08-10
  • 打赏
  • 举报
回复
楼主搞定了吗?
我看了下nio,它用的是把整个文件映射的类存中。读的效率跟定是高多了,但它最终得到的是个ByteBuffer,处理有点难。我把ByteBuffer最终变成了正确编码的String,然后处理String。
我只能得到“第几节”这样得标题。我试了个1M多点的TXT没问题
搂主一定要用我的代码试一下哦。说说试验得结果


代码如下:
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.nio.charset.*;
public class testNIO
{
public static void main(String args[])
{
FileInputStream fOut;
FileChannel fChan;
try
{
fOut = new FileInputStream("test.txt");
fChan= fOut.getChannel();


ByteBuffer mBuf = fChan.map(FileChannel.MapMode.READ_ONLY, 0, fChan.size());

Charset cs = Charset.defaultCharset();
CharBuffer cb = cs.decode(mBuf);

String all = cb.toString();
String title;
String content;
int s=0;
int e=0;
for(int i=1; i<60; ++i)
{
s = e;
title = "第"+i+"节";
e = all.indexOf(title);
if(e<0)
{
break;
}
content = all.substring(s,e);
System.out.println(title);
System.out.println(content);
}


fChan.close();
fOut.close();

}
catch(IOException ex)
{
ex.printStackTrace(System.out);
}
}
}
bbbbcccc 2006-08-08
  • 打赏
  • 举报
回复
http://valenhua.go3.icpcn.com/
qingyuan18 2006-08-08
  • 打赏
  • 举报
回复
File f;
BufferedReader br=null;
String sTitle="";
StringBuffer sText = new StringBuffer("");

try{
f=new File(pm_sFilePath);
br=new BufferedReader(new FileReader(f));
String s="";
int pageNum = 1;
while( (s = br.readLine())!=null)
{
if(s.trim().startsWith("第"+pageNum+"节"))
{
sTitle = s.trim();
}
else if( (! s.trim().startsWith("本电子书籍由"))&&(! s.trim().startsWith("圣域")))
{
sText.append(s.trim());
}
else if(!s.trim().startsWith("圣域"))
{
System.out.println("PageTitle"+pageNum+"=="+sTitle);
System.out.println("PageText"+pageNum+"=="+sText);
// updateSql(sName,sTitle,sText.toString(),sAuthor,tid,imagePath,sDesc);//插入数据表
sText = new StringBuffer("");
sTitle = "";
pageNum ++;

}
}


br.close();

}
catch(Exception e)
{
System.out.println(e.getMessage());
}

finally
{
if(br!=null)
{
try
{
br.close();
}
catch (IOException e)
{
System.out.println(e.getMessage());
}
}

}

不要把页数61写死了
husl 2006-08-08
  • 打赏
  • 举报
回复
1 把sText改成 StringBuffer StringBuffer的默认长度是16
可以new StringBuffer(int length)设置初始长度 设大点

2 那个for循环用不着吧 可以试下通配符 不知道对效率有多大影响
麦子_9 2006-08-08
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
只有缓冲区的拼合,注意一下就行了.
  • 打赏
  • 举报
回复
幸运的是不需要的内容,其格式都比较固定.

建立几百K的缓冲区,一次读入文本文件的一大块内容,也就是把一个文本文件分批拆分成若干个大块,每次处理一块.

每一次把缓冲区中与正文和章节无关的内容,如下(回车用转义符代替),用""替换没

"

本电子书籍由 〖 TopChn 〗 工作组 收集整理制作,版权归原作者所有


上一页 首页 下一页





友情提示:↑点上面的字体按钮可改变字体的大小
上一页 首页 下一页



圣域
"
还有"上篇 "

这样,留下来的就是章节和正文,如"第1节:你还记得我吗..."
通过搜索截取,章节数字和正文都可以提取出来了.

她从奈何桥上走来,忧伤滑过她的眼神。她问我,你还记得我吗?
我苦涩的笑了。我说我连自
moonchap 2006-08-08
  • 打赏
  • 举报
回复
早说啊,害我把文章看了一遍
hbwhwang 2006-08-08
  • 打赏
  • 举报
回复
刚才没看清楚,的确是有问题,你用过多的循环了,没必要!
给你改了一下,你再看看

public void allDone(String filePath, String sName, String sAuthor,
String imagePath, String sDesc, int tid) throws
IOException {
File f;
BufferedReader br = null;
String sTitle = "";
StringBuffer sText=new StringBuffer();

try {
f = new File(filePath);
br = new BufferedReader(new FileReader(f));
String s = "";
//for (int i = 1; i <= 61; i++) {
int i = 1;
while ( (s = br.readLine()) != null) {
if (s.trim().equals("")){
continue;
}
if (s.trim().startsWith("第" + i + "节")) {
if (i!=1){
System.out.println(sTitle);
System.out.println(sText.toString());
// updateSql(sName,sTitle,sText,sAuthor,tid,imagePath,sDesc);//插入数据表
}
sTitle = s.trim();
sText = new StringBuffer();
i++;
continue;
}
if (!s.trim().startsWith("本电子书籍由")&&!s.trim().startsWith("上一页 首页")&&!s.trim().startsWith("友情提示:") ) {
sText.append(s+"\n");
//continue;
}
}
System.out.println(sTitle);
System.out.println(sText.toString());
// updateSql(sName,sTitle,sText,sAuthor,tid,imagePath,sDesc);//插入数据表

//}

br.close();

}
catch (Exception e) {
br.close();
e.printStackTrace();
}

finally {
if (br != null)
br.close();
}

}
hbwhwang 2006-08-08
  • 打赏
  • 举报
回复
差不多,你把
sText改成:
StringBuffer sText=new StringBuffer();

sText += s;改成
sText.append(s);试试
swantt 2006-08-07
  • 打赏
  • 举报
回复
还有我看了一下BufferedReader里面有一个:
public void mark(int readAheadLimit)
throws IOException标记流中的当前位置。对 reset() 的后续调用将尝试将该流重新定位到此点。

覆盖:
类 Reader 中的 mark
参数:
readAheadLimit - 在仍保留该标记的情况下,对可读取字符数量的限制。在读取此数量的字符后,尝试重置流可能会失败。限制值大于输入缓冲区的大小将导致分配一个新缓冲区,其大小不小于该限制值。因此应该小心使用较大的值。
抛出:
IllegalArgumentException - 如果 readAheadLimit < 0
IOException - 如果发生 I/O 错误

那我觉得这个可以动态设置读的起,尾位置,那又如何获取那个参数呢。
zx2002027 2006-08-07
  • 打赏
  • 举报
回复
及时刷新缓冲区
swantt 2006-08-07
  • 打赏
  • 举报
回复
这里的i设的是章节数,因为此书有61章,所以每章节的标题都是 第i章
从这里获取标题后然后再往下读相对应的内容至遇到“本电子书籍由 〖 TopChn 〗 工作组 收集整理制作,版权归原作者所有”结束。
swantt 2006-08-07
  • 打赏
  • 举报
回复
public void allDone(String filePath,String sName,String sAuthor,String imagePath,String sDesc,int tid) throws IOException {
File f;
BufferedReader br=null;
String sTitle="",sText="";

try{
f=new File(filePath);
br=new BufferedReader(new FileReader(f));
String s="";
for(int i=1;i<=61;i++){
while((s=br.readLine())!=null){

if(s.trim().startsWith("第"+i+"节")){
sTitle=s.trim();
continue;
}
if(!s.trim().startsWith("本电子书籍由")&&!s.trim().startsWith("第"+i+"节")){
sText +=s;
continue;
}
}
// updateSql(sName,sTitle,sText,sAuthor,tid,imagePath,sDesc);//插入数据表
}

br.close();

}
catch(Exception e){
br.close();
e.printStackTrace();
}

finally{
if(br!=null)
br.close();
}

}


我这个肯定有问题。还在继续思考中。其它没用到的参数大家不用考虑,主要是获取标题和内容就行了。。
boyu_song 2006-08-07
  • 打赏
  • 举报
回复
BufferedReader可以设置size
hbwhwang 2006-08-07
  • 打赏
  • 举报
回复
你最好把代码发出来,让大家帮你分析问题在何处
hbwhwang 2006-08-07
  • 打赏
  • 举报
回复
几万行不算什么。记得Buffered就OK了。
swantt 2006-08-07
  • 打赏
  • 举报
回复
BufferedReader里面好像没有直接读起,末位置的方法啊。再说啦,这个读的起,尾位置又怎么设定啊?
加载更多回复(9)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧