如何从文件中删除指定的行?

时间:2017-01-10 09:58:49

标签: java

我有一个包含一些数据的文件,我想从这个包含特定子字符串的文件中删除一些行。

我的档案示例:

{1:F21FIEGEGCXAXXX4781478239}{4:{177:1603150825}{451:0}}
{1:F01FIEGEGCXAXXX4781478239}
{2:O1030924160315RJHISARIAXXX83068856911603150825N}
{4::20:PO/180797059/767
:23B:CRED
:32A:160315USD1405,19
:50K:/213000010006082015619
M A A H
TABOUK 71411 PO BOX 000001
:53B:/152700
:57A:FIEGEGCXMIN
:59:/3829
ESAM ABDELALIM ABDELRAHMAN HABIB
EGYPT
:70:Family Expenses
:71A:SHA-}
{5:{MAC:00000000}{CHK:C04D5471B9E9}}{S:{SAC:}{COP:P}}

我想删除以{451:0}}结尾的每一行,如第一行和{COP:P}},如最后一行。

2 个答案:

答案 0 :(得分:1)

如果输入文件不是很大。以下可能是解决方案的起点。

{{ breakpoints | lap }}

编辑正如Klitos Kyriacou在评论中所建议的那样。对于大文件,我们应该跳过创建临时列表。

Path in = Paths.get("in.txt");
Path out = Paths.get("out.txt");
Files.write(out, Files.lines(in, StandardCharsets.UTF_8)
        .filter(s -> !s.endsWith("{451:0}}") && !s.endsWith("{COP:P}}"))
        .collect(Collectors.toList()));

答案 1 :(得分:0)

像这样 -

    try{
        Scanner scanner = new Scanner(new File("input.txt"));
        Writer writer = new PrintWriter(new File("output.txt"));
        while(scanner.hasNextLine()){
            String line = scanner.nextLine();
            if(!line.endsWith("{451:0}}") && !line.endsWith("{COP:P}}")){
                writer.write(line+System.getProperty("line.separator"));
            }
        }
        scanner.close();
        writer.flush();
        writer.close();
    }catch(Exception e){
        e.printStackTrace();
    }