2013-11-15 106 views
0

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

你的for循環計數器應該在括號中。例如:for(String line;(line = reader.readLine())!= null && counter!= activecode.length; counter ++){...} – JamoBox

+0

如果您要將輸入文件的其餘部分複製到輸出,在前五行之後,程序中沒有代碼可以實現這一點。不過,我不清楚你想要做什麼。我想告訴我們,'activecode []'的內容到底是什麼,你期望輸出文件看起來像什麼,將是非常有用的。 – ajb

回答

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],那麼應該發生什麼?所以我不知道以上是否是正確的解決方案。我認爲你需要確定(至少對你自己而言)該程序應該做什麼。

最後,在循環完成後,程序不會再讀取任何輸入。也就是說,它只讀取前五行。然後它關閉輸入和輸出文件。如果您需要讀取輸入文件的其餘部分並將其複製到輸出文件中,則需要編寫另一個循環來執行此操作。