2015-03-02 115 views
0

我想用mark()reset()方法来读取分隔线之前的行。在java中标记和重置BufferedReader

String line; 
    FileReader fr = new FileReader(PATH); 
    LineNumberReader br = new LineNumberReader(fr); 
    String DIVIDER = "================================"; 
    while ((line = br.readLine()) != null) { 
     boolean endOfObj = false; 
     while (!line.trim().contains(DIVIDER)) { 
      br.mark(line.length()); 
      line = br.readLine(); //return next line 
     } 
     br.reset();   
     line = br.readLine(); 

但行变量值不是上一行的分隔符。 我的问题是什么。 谢谢

+1

首先,在读完这一行后标记,所以标记在行后面。 – SJuan76 2015-03-02 08:27:21

+1

不是一个很好的方式来做到这一点。请记住每次围绕循环的上一行,并在跳出循环时使用它。 – EJP 2015-03-02 09:09:31

+0

thx @EJP,出于某种原因,我应该再次回到特定的行并在我的数据库中存储一些额外的数据,我想用mark()和reset()来处理它,我该怎么做? – farhad 2015-03-02 09:26:39

回答

1

你可以尝试使用下面的代码吗?我整理了一下你的代码,并把它放到一个名为getPreviousLine()的方法中。我感觉你在使用mark()reset()时挂掉了,所以我只依靠纯粹的逻辑和状态来找到分隔符之前的行。如果没有找到分隔符,该方法将返回null

String getPreviousLine(String PATH) { 
    String line; 
    FileReader fr = new FileReader(PATH); 
    LineNumberReader br = new LineNumberReader(fr); 
    String DIVIDER = "================================"; 
    boolean endOfObj = false; 
    String previousLine = br.readLine(); 

    if (previousLine == null) { 
     return null; 
    } 

    while ((line = br.readLine()) != null) { 
     if (line.trim().contains(DIVIDER)) { 
      endOfObj = true; // found the divider; break 
      break; 
     } else { 
      previousLine = line; // advance your line pointer 
     } 
    } 

    if (endOfObj) { 
     return previousLine; 
    } else { 
     return null; 
    } 
} 
+0

谢谢,它真的有帮助。但是我的问题是什么?我如何返回指向特定行的指针。是否可以用mark()和reset()或不是? – farhad 2015-03-02 08:40:49

+0

'LineNumberReader'' mark()'和'reset()'方法用于设置指向文件流的指针,以便能够重置为给定行。你需要一个指向你的文件的指针吗? – 2015-03-02 08:45:56

+0

是的,我需要,我应该在我的文件中移动指针 – farhad 2015-03-02 09:19:28