簡體   English   中英

刪除文本文件的前五行

[英]Deleting first five lines of a text file

我正在嘗試刪除與數組中存儲的五個值匹配的文本文件的前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

這是原始文件減去數組內容。

這是代碼中的循環:

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] ,那應該發生什么? 所以我不知道以上是否是正確的解決方案。 我認為您需要(至少為您自己)定義程序應該執行的操作。

最后,完成此循環后,您的程序不再讀取任何輸入。 也就是說,它僅讀取前五行。 然后關閉輸入和輸出文件。 如果您需要讀取其余的輸入文件並將其復制到輸出文件,則需要編寫另一個循環來執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM