圣域 
第1节:你还记得我吗 
上篇 她从奈何桥上走来,忧伤滑过她的眼神。她问我,你还记得我吗? 
我苦涩的笑了。我说我连自己都记不起来了,又怎么会记得你? 
我叫洛崖。很多时候我都记不清自己从哪里来,也从来不曾知道自己要往哪里去。在我隐隐的记忆里,冥界好像一天到晚都是黄昏,天空是灰色的,沉沉的似乎快贴到了地面。阴森而刺骨的风在天空中无情的肆虐,将灰喜鹊的哀鸣渲染得更加凄厉和无助。这时我总会努力的去分辨掺杂在其中杜鹃鸟的叫声,它们一遍一遍的喊,不如归去,不如归去。我抬头寻不到它们的踪迹,落寞却涌满了我的眼睛。我不断的问自己我是谁,心如刀割。 
我在冥界生活了很久,这种单调的生活让我变得很茫然。在冥界,当那些可怜的鬼魂踏上奈何桥的时候,他们总会回首去思念自己的过去,然后三生石上会刻满他们的前世今生。我知道我不是鬼魂,因为我可以真切的抚摸到自己的身体。我翻遍所有的三生石却找不到关于我的记载。我问孟婆知道我是谁吗?孟婆没有摇头,她的眼神里散落出淡淡的痛苦,然后她转身什么也没有说。 
孟婆是冥界最年老的神。她掌管着冥界所有鬼魂的前世今生。每当冥界来了新的鬼魂,孟婆就会走上前去,捧起一碗孟婆汤。然后她会说,喝一碗孟婆汤你就会忘记,不管是快乐还是痛苦。汤冒着热气,摇摆着慢慢上升,朦胧了鬼魂们的脸。我看不清他们喝孟婆汤时脸上的表情,抑或快乐,抑或悲伤。 
现在已经是秋末,奈何桥旁边的树光秃秃的,金黄的叶子落满一地。风吹来已经明显有冬天的寒意,一片叶子被风吹起贴到我的脸上,然后又缓缓的盘旋而下。我抬头,看到了她。她走在奈何桥上,美丽淡雅的脸如沐华光,清澈的眼神温柔如水。她的白袍很长,拖在地上,惊动了落在地上的叶子。风把叶子扬起环绕着她,依依不舍。然后我看到她回过头去望着灰色的天空,瀑布般的长发在风中曼舞。转过身的时候她的眼神开始夹杂着忧郁,随着秋风在空中飘荡弥漫。 
我回头看到三生石上写着,昭茵,灵界的公主。 
孟婆照例捧着孟婆汤走上前去,她说,喝一碗孟婆汤你就会忘记,不管是快乐还是痛苦。 
不,我不要喝,我不要忘记。她的声音很凄凉,如秋风的哽咽。我不禁打了个冷颤。然后她看到了我,她问我,你不记得我了吗? 
我说我连自己都记不起来了,又怎么会记得你?奈何桥旁的士兵走了过来,说,不管你是谁,到了这里就必须喝下孟婆汤,否则我们将送你到魔界。 
我不知道自己第一次喝孟婆汤是在什么时候,以前所有的一切也许就在那一次全部被遗忘了。以后的每个傍晚我都会喝下一碗孟婆汤,但却什么作用也没有了。 
她听到士兵的话惊恐的向后退了两步,身形优雅带有余韵,一片叶子在她的眼前缓缓的落下。我说,那你肯定知道我是谁了,你能告诉我吗? 
士兵把长矛指向了我的胸膛,铜亮的矛头在秋风中泛着寒光。我笑了。孟婆走过来说,你们退下吧,你们是打不过他的。我一直很奇怪虽然我记不清自己从哪里来,但我却拥有别人无法对抗的幻术和魔法。我常对自己说,幻术是用来骗人的,而魔法是用来杀人的。孟婆每次都摇摇头,她说,幻术有时候骗的是自己,魔法也是可以用来救人的。 
所有的士兵都往两边退去,我站在那里看到了忘川河。她踏着轻盈的步伐跟着我,绕过忘川河。忘川河中的水从来不曾恣肆汪洋,它就这样缓缓的流着,淙淙的水声像是贴着肌肤游动,延绵而细腻。我问她,我是谁? 
她看着忘川河,眼神恍惚如阳光的斑驳。良久,她说,我是灵界的公主,而你是灵界的驸马。几年前你触怒了天界之王,所以被罚到冥界来赎罪。我知道你喝了孟婆汤,所以你记不起我是谁了。 
我曾听孟婆说过,天界是最强大的世界,灵界,人界和冥界都要对天界顶礼膜拜。只有魔界,那个最底层也最黑暗的世界才敢反抗天界,与天界抗衡。 
我笑了,她来自灵界,一个美丽的精灵。可是她为什么要骗我呢?如果我真的是灵界的驸马,她又怎么会说是几年前而不说具体的年限呢,因为她不知道。有一种人天生就不会骗人,因为她们骗人的时候眼睛会背叛自己。 
她是一个很聪明的女子,因为她知道怎样在一个举目无亲的地方保护自己,所以我并没有揭穿她。我说,那你呢,你为什么要来冥界? 
本电子书籍由 〖 TopChn 〗 工作组 收集整理制作,版权归原作者所有 
上一页 首页 下一页 友情提示:↑点上面的字体按钮可改变字体的大小
上一页 首页 下一页圣域 
第2节:我到底是谁 
她担心的问,你冷吗? 
我摇头。我从来就没有告诉过别人我很寂寞,就像一个酒鬼,他只会把酒留在胃里而不是杯中。我的寂寞已经嵌入了我的脊骨,从身世到生活,一节一节的刻在里面。当黑夜袭来时,它会在我心中隐隐作痛,夹杂着琐碎的声响。 
我说,你有三天的时间,如果那时候你还不肯喝下孟婆汤的话,冥界的士兵就会把你推入魔界。你去吧,喝了孟婆汤,然后赎完你的罪过回到灵界去吧。说完我把头扭到一边,望向波澜不惊的忘川河,因为我不想看到她痛苦的表情。她的美芳华绝代,从我看到她第一眼开始就深深地烙在我的心中,不许有丝毫亵渎。我不知道自己说的话为什么依然那么冰冷,或许已经无法再改变了。 
她低下头默默地沿着忘川河离开,孤单的身影犹如河旁柳树的枝条,一线一线垂落到地上。我转过身去,回到奈何桥,风突然变得很凉。那个傍晚我没有喝孟婆汤,虽然它对我已经没什么作用,但我还是害怕,害怕孟婆汤洗去我的脑海中关于她的记忆。 
那天晚上我一直都是醒着的,黑色的风在屋外咆哮嘶喊。我不知道自己是不是应该去帮她。黎明的时候我起身,在冥界随意走动。透过依稀的光线,我看到了她。她站在冥界的轮回殿外,看着从人界渗透下来的亮光发呆。她的脸明亮而且柔和,但却明显有哭过的痕迹。那一刻,我突然说,你想离开这里吗? 
 本电子书籍由 〖 TopChn 〗 工作组 收集整理制作,版权归原作者所有 
上一页 首页 下一页 友情提示:↑点上面的字体按钮可改变字体的大小
上一页 首页 下一页
-------------------------------------------------------------------以上是我截取的一本小说的部份章节(可能会有几百章节)。这些都是保存在一个文件里的(1.txt)。现在我的目的是截取每一章节标题如(第1节:你还记得我吗 ,第2节:我到底是谁)等以及每章节相对应的每章节内容,然后相对应的挺入到数据表中。也就是说如果有100章节,就要挺入100行记录(主要是获取章节标题以及相对应的内容)到表中。    大伙帮我想想办法,我现在试了好久,好几次机子都快死机了。
    急啊!再不写出来估计没脸见老板啦!

解决方案 »

  1.   

    现在是这个文件可能会有几万行,如果按照readLine()效率也太低了吧。哎,没辙了,大伙帮忙写个简单的程序来。我郁闷了。
      

  2.   

    readLine()效率不低啊
    就算你要使用其他方法也要从新解析文件啊~
    只要解析文件都是这样的啊~
      

  3.   

    死机的原因可能是内存的问题吧,如果内存小可以用-XMax等参数设置一下,另外也可以改变一下程序数据结构的设计,比如说章节内容可以存储为起止的文件指针地址,这样可以降低内存消耗。
    关于解析个人觉得还是要readLine()的,
      

  4.   

    BufferedReader里面好像没有直接读起,末位置的方法啊。再说啦,这个读的起,尾位置又怎么设定啊?
      

  5.   

    几万行不算什么。记得Buffered就OK了。
      

  6.   

       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();
       }
       
       }
    我这个肯定有问题。还在继续思考中。其它没用到的参数大家不用考虑,主要是获取标题和内容就行了。。
      

  7.   

    这里的i设的是章节数,因为此书有61章,所以每章节的标题都是  第i章
    从这里获取标题后然后再往下读相对应的内容至遇到“本电子书籍由 〖 TopChn 〗 工作组 收集整理制作,版权归原作者所有”结束。
      

  8.   

    还有我看了一下BufferedReader里面有一个:
    public void (int readAheadLimit)
              throws IOException标记流中的当前位置。对 reset() 的后续调用将尝试将该流重新定位到此点。 覆盖:
    类 Reader 中的 
    参数:
    readAheadLimit - 在仍保留该标记的情况下,对可读取字符数量的限制。在读取此数量的字符后,尝试重置流可能会失败。限制值大于输入缓冲区的大小将导致分配一个新缓冲区,其大小不小于该限制值。因此应该小心使用较大的值。 
    抛出: 
    IllegalArgumentException - 如果 readAheadLimit < 0 
    IOException - 如果发生 I/O 错误那我觉得这个可以动态设置读的起,尾位置,那又如何获取那个参数呢。
      

  9.   

    差不多,你把
    sText改成:
    StringBuffer sText=new StringBuffer();sText += s;改成
    sText.append(s);试试
      

  10.   

    刚才没看清楚,的确是有问题,你用过多的循环了,没必要!
    给你改了一下,你再看看    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();
            }    }
      

  11.   

    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写死了
      

  12.   

    幸运的是不需要的内容,其格式都比较固定.建立几百K的缓冲区,一次读入文本文件的一大块内容,也就是把一个文本文件分批拆分成若干个大块,每次处理一块.每一次把缓冲区中与正文和章节无关的内容,如下(回车用转义符代替),用""替换没"本电子书籍由 〖 TopChn 〗 工作组 收集整理制作,版权归原作者所有 
    上一页 首页 下一页 友情提示:↑点上面的字体按钮可改变字体的大小
    上一页 首页 下一页圣域 
    "
    还有"上篇 "这样,留下来的就是章节和正文,如"第1节:你还记得我吗..."
    通过搜索截取,章节数字和正文都可以提取出来了.她从奈何桥上走来,忧伤滑过她的眼神。她问我,你还记得我吗? 
    我苦涩的笑了。我说我连自
      

  13.   

    1 把sText改成 StringBuffer StringBuffer的默认长度是16
    可以new  StringBuffer(int length)设置初始长度 设大点2 那个for循环用不着吧 可以试下通配符  不知道对效率有多大影响
      

  14.   

    楼主搞定了吗?
    我看了下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);
    }
    }
    }
      

  15.   

    http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/nio/MappedByteBuffer.htmlnio,可以满足你