删除文本文件的前五行

时间:2013-11-15 20:26:48

标签: java arrays loops text

我正在尝试删除与存储在数组中的五个值匹配的文本文件的前5行。这是我到目前为止所拥有的......

void write(String[] activecode) throws IOException
{

    File productcodes = new File("productcodes.txt");

    String charset = "UTF-8";

    BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(productcodes), charset));
    File temp = File.createTempFile("productcodes", ".txt", productcodes.getParentFile());

    PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(temp), charset));

    int counter = 0;

    for (String line; (line = reader.readLine()) != null && counter != activecode.length;) 
    {
        line = line.replace(activecode[counter], "");
        writer.println(line);
        counter++;
    }

    reader.close();
    writer.close();


    productcodes.delete();
    temp.renameTo(productcodes);   

}

另外作为参考,这是文本文件的样子......

BH390311ED6911-D8P8-BG7X
BH390311ED6912-GXKQ-BQ9V
BH390311ED6913-B6JF-55YG
BH390311ED6914-7B56-W37Y
BH390311ED6915-HPDW-V949
BH390311ED6916-3XX4-NDSN
BH390311ED6917-JH4M-PK6B
BH390311ED6918-WQKJ-5TKG
BH390311ED6919-TKS3-WHG3
BH390311ED6920-QTJV-9F43
BH390311ED6921-D45V-GHNG
BH390311ED6922-JH5F-4KXM
BH390311ED6923-6NQM-WSWF
BH390311ED6924-DMFD-BTN6
BH390311ED6925-7883-JG67
BH390311ED6926-3GRN-W7YT
BH390311ED6927-CBKB-47RW

数组已保存为文本文件的前五个值。

对于为什么输出是只剩下前三个值的文本文件有任何想法?我是Java的新手(你可能会说:D)

编辑: 数组activecode []的内容是:

BH390311ED6911-D8P8-BG7X
BH390311ED6912-GXKQ-BQ9V
BH390311ED6913-B6JF-55YG
BH390311ED6914-7B56-W37Y
BH390311ED6915-HPDW-V949

我想要的输出是:

BH390311ED6916-3XX4-NDSN
BH390311ED6917-JH4M-PK6B
BH390311ED6918-WQKJ-5TKG
BH390311ED6919-TKS3-WHG3
BH390311ED6920-QTJV-9F43
BH390311ED6921-D45V-GHNG
BH390311ED6922-JH5F-4KXM
BH390311ED6923-6NQM-WSWF
BH390311ED6924-DMFD-BTN6
BH390311ED6925-7883-JG67
BH390311ED6926-3GRN-W7YT
BH390311ED6927-CBKB-47RW

哪个是原始文件减去数组的内容。

1 个答案:

答案 0 :(得分:0)

这是代码中的循环:

for (String line; (line = reader.readLine()) != null && counter != activecode.length;) 
{
    line = line.replace(activecode[counter], "");
    writer.println(line);
    counter++;
}

以下是它的作用:对于counter = 0,1,2,3和4,它从输入文件中读取一行。 line.replace(activecode[counter],"")会在输入行中查找activecode的代码。如果找到它,它会从线上删除它。如果整个line等于整个activecode[counter]元素,则该行将替换为空字符串""

然后你把这一行写到文件中。如果您的意图是从文件中删除行,则不会这样做。 line现在(可能)是一个空字符串,writer.println(line)将空字符串写入输出文件。我不完全确定你的需求是什么;它可能像

if (!line.equals(activecode[counter]))
    writer.println(line);

除非它等于activecode[counter],否则会写出该行,如果它们相等,它将跳过该行并且不会写出任何内容。但是,我不清楚确切的要求是什么 - 例如,如果文件中的第三个​​行等于activecode[0],应该发生什么?所以我不知道以上是否是正确的解决方案。我认为你需要定义(至少对你自己)该程序应该做什么。

最后,在完成此循环后,您的程序不再读取任何输入。也就是说,它只读取前五行。然后它关闭输入和输出文件。如果您需要读取输入文件的其余部分并将其复制到输出文件,则需要编写另一个循环来执行此操作。