java - 使用 BufferedReader/BufferedWriter 删除文件的第 N 行
问题描述
所以我有一个像这样结构的文本文件(产品、价格、类别、数量)。
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){}
它应该从文件中删除第二个项目,但它只是制作一个副本
解决方案
您需要做的就是使用调试器运行您的代码,以发现您的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
条件永远是真实的。
推荐阅读
- python - 从多个 CSV 到带有计算的 Dataframe 列
- excel - VBA 条件格式 - xlExpression - 公式
- vue.js - 编辑时检查用户是否存在于Vue中
- ios - iOS Safari Web 扩展 - 当我们添加新的所需权限时,当前用户会发生什么
- javascript - d3.js 可缩放 forceSimulation:限制拖动时的 x/y 变换
- angular - 在全局错误处理程序中处理错误可能会使 Angular 应用程序处于未知状态
- python - 如何在python中停止continuous_threading
- python-3.x - 在 tkinter 窗口中嵌入另一个应用程序
- javascript - 你如何清理字符串以传递正则表达式?
- flutter - Flutter Web:像 YouTube 一样全屏播放视频