是否可以通过Java中的BufferedWriter从文件中删除最后一行?

时间:2015-03-19 19:01:15

标签: java io bufferedwriter

我有一个servlet类。在类中,我使用Java 6中的BufferedWriter#write(String)来动态创建文本文件。当我检查文件时,在最后一行创建了一个空行。有没有办法可以通过该类以编程方式删除它?或者我应该使用不同的API?

================
data 1 recorded
================
--> a blank line needs in between
================
data 2 recorded
================
--> a blank line needs to be removed at last line

// trimmed down version of doPost method from a servlet class
protected void doPost(.....) {
    ......  
    BufferedReader reader = new BuffereReader(new ...)
    BufferedWriter logger = new BufferedWriter(new...)
    while ((line = reader.readLine()) != null) {
       if (!line.equals("")) {
          try {
              doSomething(line,logger);                
              logger.write("=============\r\n"); // create a footer
              logger.write("\r\n");
          } catch (RuntimeException e) {
              logger.write(" warning! " + e.getMessage() + "\r\n");
              logger.write("=============\r\n"); // create a footer
              logger.write("\r\n");
          } 
      } // end of if stmt
   } // end of while loop
    ....
} // end of doPost method


// trimmed down version
private void doSomething(String line, BufferedWriter logger) {
   logger.write("=============\r\n"); // create a header  
   ....     
   if (...) {
       throw new RuntimeException("data is corrupted");
   } else {
     logger.write("data is good!\r\n");
   }
}

2 个答案:

答案 0 :(得分:0)

不,你不能用那个类删除它。 The API没有提供这样做的方法。相反,您的代码必须知道它是否正在处理最后一行,当它是,跳过将其传递到BufferedWriter

答案 1 :(得分:0)

您可以遍历生成的文件,并将每一行存储到列表中(如果该行不为空)

之后您可以将新列表写入文件。

由于您正在写入文件的方式,因此可能会发生这种情况。分享您的代码。