[英]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.