簡體   English   中英

使用 BufferedReader/BufferedWriter 刪除文件的第 N 行

[英]Removing Nth line of File with BufferedReader/BufferedWriter

所以我有一個結構如下的文本文件(產品、價格、類別、數量)。

Apple
1.0
Fruits
120
Cucumber
1.4
Vegetables
110
Pear
1.6
Fruits
120

我需要一個可以刪除第 N 個項目的 function,在本例中,第二個項目形成文件(第 5、6、7、8 行),所以它看起來像這樣:

Apple
1.0
Fruits
120
Pear
1.6
Fruits
120

我所能找到的只是從文件中刪除特定字符串的方法,但這不是我在這種情況下所需要的。

編輯:到目前為止,這是我的代碼:

int place=2;            
try{
    File inputFile = new File("Cart.txt"); 
    File tempFile = new File("Cart1.txt"); 
    BufferedReader reader = new BufferedReader(new FileReader(inputFile));
    BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));

    int itemToRemove=place*4;
    String currentLine;
    int line=0;
    while((currentLine = reader.readLine()) != null) {
        if(line!=itemToRemove||line!=itemToRemove+1||line!=itemToRemove+2||line!=itemToRemove+3){
            writer.write(currentLine + System.getProperty("line.separator"));
        }
        line++;
    }
    writer.close();
    reader.close();
    tempFile.renameTo(inputFile);
}catch(Exception x){}

它應該從文件中刪除第二個項目,但它只是制作了一個副本

您需要做的就是使用調試器運行您的代碼,以發現您的if條件不正確,並且遞增line應該是while循環內執行的第一個操作。

這是您的代碼和我的更正。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

public class RemovNth {

    public static void main(String[] args) {
        int place = 2;
        try {
            File inputFile = new File("Cart.txt");
            File tempFile = new File("Cart1.txt");
            BufferedReader reader = new BufferedReader(new FileReader(inputFile));
            BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));
            int itemToRemove = (place - 1) * 4;
            String currentLine;
            int line = -1;
            while ((currentLine = reader.readLine()) != null) {
                line++;
                if (line == itemToRemove || line == itemToRemove + 1 || line == itemToRemove + 2
                        || line == itemToRemove + 3) {
                    continue;
                }
                writer.write(currentLine + System.getProperty("line.separator"));
            }
            writer.close();
            reader.close();
            tempFile.renameTo(inputFile);
        }
        catch (Exception x) {
        }
    }
}

請注意,根據文檔,方法renameTo可能會失敗。

您的if條件將始終為真。

所以我有一個像這樣結構的文本文件(產品、價格、類別、數量)。

Apple
1.0
Fruits
120
Cucumber
1.4
Vegetables
110
Pear
1.6
Fruits
120

我需要一個可以刪除第 N 項的 function,在這種情況下,第二項形成文件(即第 5、6、7、8 行),所以它看起來像這樣:

Apple
1.0
Fruits
120
Pear
1.6
Fruits
120

我能找到的只是從文件中刪除特定字符串的方法,但這不是我在這種情況下需要的。

編輯:到目前為止,這是我的代碼:

int place=2;            
try{
    File inputFile = new File("Cart.txt"); 
    File tempFile = new File("Cart1.txt"); 
    BufferedReader reader = new BufferedReader(new FileReader(inputFile));
    BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));

    int itemToRemove=place*4;
    String currentLine;
    int line=0;
    while((currentLine = reader.readLine()) != null) {
        if(line!=itemToRemove||line!=itemToRemove+1||line!=itemToRemove+2||line!=itemToRemove+3){
            writer.write(currentLine + System.getProperty("line.separator"));
        }
        line++;
    }
    writer.close();
    reader.close();
    tempFile.renameTo(inputFile);
}catch(Exception x){}

它應該從文件中刪除第二個項目,但它只是制作一個副本

暫無
暫無

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

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