我正在尝试删除与存储在数组中的五个值匹配的文本文件的前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
哪个是原始文件减去数组的内容。
答案 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]
,应该发生什么?所以我不知道以上是否是正确的解决方案。我认为你需要定义(至少对你自己)该程序应该做什么。
最后,在完成此循环后,您的程序不再读取任何输入。也就是说,它只读取前五行。然后它关闭输入和输出文件。如果您需要读取输入文件的其余部分并将其复制到输出文件,则需要编写另一个循环来执行此操作。