我正在尝试从文件中删除某些行。我的文件是.txt,看起来像这样:
[ITEMS]
[BANK]
[FRIENDS]
[EOF]
当我的程序运行时,它会在此文件中写入行。现在我要做的是有一个方法,当我调用它时,它将删除之间的所有行 [BANK]和[FRIENDS]。它无法删除任何其他内容。留下一条空行。
如果您需要更多信息,请与我们联系!
答案 0 :(得分:1)
这是部分完成的代码,向您展示必须完成的工作,但它可能存在一些缺陷,它使用Google Guava - http://code.google.com/p/guava-libraries/
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import com.google.common.io.Files;
public class LinesDeleter {
private static boolean between;
public static void main(String[] args) throws IOException {
File file = new File("somePath");
deleteLinesBetweenFromFile("line1", "line2", file);
}
private static void deleteLinesBetweenFromFile(String start, String end,
File file) throws IOException {
List<String> readLines = null;
List<String> newLines = new ArrayList<String>();
Charset charset = Charset.defaultCharset();
readLines = Files.readLines(file, charset);
if (readLines != null) {
for (String line : readLines)
if ( !isBetweenBannedLines(line, start, end))
newLines.add(line);
File to = new File("somefile");
Files.write(writeAsSingleLines(newLines), to, charset);
}
}
private static CharSequence writeAsSingleLines(List<String> newLines) {
// TODO Auto-generated method stub
return null;
}
private static boolean isBetweenBannedLines(String line, String start,
String end) {
if (line.equals(start)) {
between = true;
return true;
}
if (line.equals(end)) {
between = false;
return true;
}
if (between)
return true;
return false;
}
}
答案 1 :(得分:0)
你需要做什么(如果你还没有做过)有一些文件内标记,用于识别某个字段,例如[BANK]或[FRIENDS],是否已经开始或结束。如果您将文件格式化为:
#Start Bank Section
<some bank data>
<some more bank data>
#End Bank Section
<junk you want to get rid of>
<more junk you want to get rid of>
<even more junk you want to get rid of>
#Start Friends Section
...
然后你可以在每个部分编写一个读取函数并将其转换为String,然后根据需要将其输出到新的或覆盖的文件。
如果您无法控制文件的格式,您需要一些区分行的方法,这将首先需要有关文件格式化方式的更详细信息。
如果您需要在Bank和Friends部分之间放置任何内容(如空行),只需在写入之间将一个由换行符(“\ n”)组成的字符串写入文件即可轻松完成银行和朋友部分提交。