java - 通过控制台删除文本文件中的行(对象)
问题描述
我不知道如何通过控制台从文本文件中删除姓氏的一行。我必须在控制台中写出一个姓氏并删除该姓氏的所有记录。我的文件.txt
name surname data 11.11.1111
name1 surnama1 data1 12.12.2010
我的人类:
public class Person implements Serializable, Comparable<Person> {
public String name;
public String surname;
public String secondName;
public String age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age.equals(person.age) &&
Objects.equals(name, person.name) &&
surname.equals(person.surname) && secondName.equals(person.secondName);
}
getters,setters,toString , constructor here...
public static Person parseRemove(String string) {
String[] parts = string.split(" ");
return new Person(parts[0], parts[1], parts[2], parts[3]);
}
compare here
conparebySurname here
我的 Remove 方法,但它不能很好地工作,我不知道我应该在这里修复什么:
public static Boolean removeSurname() throws IOException {
File file;
String line;
Scanner in = new Scanner(System.in);
Set<Person> res = new TreeSet<>();
System.out.print("from which file: ");
line = in.nextLine();
System.out.print("which surname u need to delete ");
String lineToRemove;
String inLine = "";
lineToRemove = in.nextLine();
try {
file = new File(in.nextLine());
System.out.println();
} catch (NullPointerException n) {
System.err.println("no file");
return false;
}
FileInputStream fis = new FileInputStream(line + ".txt");
BufferedWriter bufferWriter = new BufferedWriter(new FileWriter(line + ".txt", true));
InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8);
BufferedReader reader = new BufferedReader(isr);
String strInfo;
byte[] buffer = new byte[1024];
while ((strInfo = reader.readLine()) != null) {
String[] arrInfo = strInfo.split(" ");
res.add(new Person(arrInfo[0], arrInfo[1], arrInfo[2], arrInfo[3]));
bufferWriter.write(strInfo) ;
if(lineToRemove.equals(strInfo)){
res.remove(strInfo); //???
// bufferWriter.newLine();
bufferWriter.flush();
}
}
fis.close();
reader.close();
bufferWriter.close();
return true;
}
解决方案
你可以试试这段代码:
public class Main {
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
String surname = in.nextLine();
FileInputStream fileInputStream = new FileInputStream("data.txt");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String strInfo;
List<String> records = new ArrayList<>();
while ((strInfo = bufferedReader.readLine()) != null) {
String[] person = strInfo.split(" ");
String personSurname = person[1];
if (!surname.equals(personSurname))
records.add(strInfo);
}
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("data.txt"));
for (String record: records) {
bufferedWriter.write(record + "\n");
}
bufferedWriter.flush();
}
}
PS:您应该bufferedWriter
仅在从文件中读取所有数据后创建。当您实例化bufferedWriter
对象时,它将使您的文件为空。
推荐阅读
- javascript - 声明为现有数组不起作用
- ios - 通过其他应用程序进行 OAuth 后自动登录新应用程序下载(iOS 11)
- angular - 可观察的数组,找到值的索引
- node.js - 在 MongoDb、NodeJS 中动态设置位置运算符
- node.js - MongoDB/Express API 不更新条目但返回 200
- node.js - nodejs单元测试错误“sinon.restore不是函数”
- java - 相当于 .get In Deque
- sql - 存储过程中的数字或值错误
- c - 如何在 C 中的彩色套接字上发送消息?
- javascript - 我自己对 Array.reduce() 和 Array.from(string) 的意外返回值