所以我有一个这样的文本文件(产品,价格,类别,数量)。
Apple
1.0
Fruits
120
Cucumber
1.4
Vegetables
110
Pear
1.6
Fruits
120
我需要一个可以删除第n项的函数,在本例中,第二项来自文件(第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){}
它应该从文件中删除第二项,但它只是复制了一个副本
2条答案
按热度按时间i1icjdpr1#
你所需要做的就是用调试器运行你的代码来发现你的
if
条件不正确,并且line
应该是在内部执行的第一个操作while
循环。这是你的密码和我的更正。
注意,根据文档,方法
renameTo
可能会失败。你的
if
条件总是正确的。9njqaruj2#
一些建议:
应该使用try with resources自动关闭资源。
不要让捕获到的异常无人看管。要么做些什么从错误中恢复,要么抛出它以便调用方法能够处理它。如果无法从异常中恢复,一种简单的方法是声明
throws
在方法签名中。将除第n项以外的所有项放入
List<String>
读取文件时。读取完成后,将列表的内容写入文件。演示: