是否可以通过 Java 中的 BufferedWriter 从文件中删除最后一行?
is it possible to remove a last line from a file via BufferedWriter in Java?
我有一个 servlet class。在 class 中,我使用 Java 6 中的 BufferedWriter#write(String) 动态创建文本文件。当我检查文件时,在最后一行创建了一个空行。有没有办法通过 class 以编程方式删除它?或者我应该使用不同的 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");
}
}
不,您不能用 class 删除它。 The API 没有提供这样做的方法。相反,您的代码必须知道它是否正在处理最后一行以及何时处理,skip 将其传递到 BufferedWriter
.
您可以遍历生成的文件并将每一行存储到列表中(如果它不为空)
稍后您可以将新列表写入文件。
这很可能是因为您写入文件的方式所致。分享您的代码。
我有一个 servlet class。在 class 中,我使用 Java 6 中的 BufferedWriter#write(String) 动态创建文本文件。当我检查文件时,在最后一行创建了一个空行。有没有办法通过 class 以编程方式删除它?或者我应该使用不同的 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");
}
}
不,您不能用 class 删除它。 The API 没有提供这样做的方法。相反,您的代码必须知道它是否正在处理最后一行以及何时处理,skip 将其传递到 BufferedWriter
.
您可以遍历生成的文件并将每一行存储到列表中(如果它不为空)
稍后您可以将新列表写入文件。
这很可能是因为您写入文件的方式所致。分享您的代码。