[英]How to remove lines dynamically from text file?
我正在為自己的習慣制作減少txt文件的應用程序。 我發現了我無法解決的問題。 我有兩個要刪除文本之間的行位置的arraylist。 問題在於該函數對所有所需的行進行計數並將其添加到arraylist。 因此,如果我刪除第52行,則第62行(下一行)將實際上是第61行,依此類推。 我該如何解決?
這是我的功能:
public void countDesiredLines() throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(
"D:\\Temp.txt"));
int lines = 0;
boolean has_it = false;
String line = null;
while ((line = reader.readLine()) != null) {
lines++;
if (has_it == true) {
has_it = false;
if ("".equals(line)) {
position.add(lines);
}
}
if (line.startsWith("[Content]")) {
has_it = true;
}
}
reader.close();
}
我已將其更改為此,但發生相同的錯誤。
開始刪除底部到頂部的空白行。
或者,如果您從上到下開始,則可以遵循以下偽代碼:
1) counter=0
2) while a line is available for removal, delete (line_no - counter)th line
3) counter++;
4) goto 2.
由於我沒有看到分兩個階段執行此操作的理由,因此如何解決一個階段的問題。 這是一個可行的解決方案:
import java.io.*;
public class Test {
private static final String lineSeparator = System.lineSeparator();
public void removeBadLinesFromFile(String filename) throws IOException {
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new FileReader(filename));
boolean content = false;
String line = null;
while ((line = br.readLine()) != null) {
if (content) {
content = false;
if (line.isEmpty()) {
// skip this line, and the next three
br.readLine();
br.readLine();
br.readLine();
continue;
}
}
if (line.startsWith("[Content]"))
content = true;
sb.append(line);
sb.append(lineSeparator);
}
br.close();
FileWriter fw = new FileWriter(filename);
fw.write(sb.toString());
fw.close();
}
public static void main(String... args) throws IOException {
Test test = new Test();
test.removeBadLinesFromFile("Test.txt");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.