我是新手(Java 6周(试图从csv文件中删除元素,该文件列出了一组学生(id, name, grades)
每个学生都在新行上。
每个学生id
都按升序值编号。我想尝试通过输入 ID 号来删除学生,但我不确定如何做到这一点。
到目前为止,我只是尝试减少用户输入的值以匹配索引,因为学生按数字列出,我在一段时间循环中完成了此操作。但是,每次迭代都无法识别来自上一个用户输入的减少,我认为我需要一种方法可以只搜索 id 的值,并从 csv 文件中删除整行。
只尝试包含相关代码。阅读以前的堆栈问题向我展示了一堆与节点相关的答案,这些答案对我来说毫无意义,因为我没有理解它所需的任何先决条件知识,而且我不确定我的其余代码是否对这些方法有效。
有什么相对简单的想法吗?
学生.txt(每个都在新行上(
1,Frank,West,98,95,87,78,77,80
2,Dianne,Greene,78,94,88,87,95,92
3,Doug,Lei,78,94,88,87,95,92
etc....
法典:
public static boolean readFile(String filename) {
File file = new File("C:\Users\me\eclipse-workspace\studentdata.txt");
try {
Scanner scanner = new Scanner(file);
while(scanner.hasNextLine()) {
String[] words=scanner.nextLine().split(",");
int id = Integer.parseInt(words[0]);
String firstName = words[1];
String lastName = words[2];
int mathMark1 = Integer.parseInt(words[3]);
int mathMark2 = Integer.parseInt(words[4]);
int mathMark3 = Integer.parseInt(words[5]);
int englishMark1 = Integer.parseInt(words[6]);
int englishMark2 = Integer.parseInt(words[7]);
int englishMark3 = Integer.parseInt(words[8]);
addStudent(id,firstName,lastName,mathMark1,mathMark2,mathMark3,englishMark1,englishMark2,englishMark3);
}scanner.close();
}catch (FileNotFoundException e) {
System.out.println("Failed to readfile.");
private static void removeStudent() {
String answer = "Yes";
while(answer.equals("Yes") || answer.equals("yes")) {
System.out.println("Do you wish to delete a student?");
answer = scanner.next();
if (answer.equals("Yes") || answer.equals("yes")) {
System.out.println("Please enter the ID of the student to be removed.");
//tried various things here: taking userInput and passing through linkedlist.remove() but has never worked.
这个解决方案可能不是最佳的或漂亮的,但它有效。它逐行读取输入文件,将每一行写出到临时输出文件中。每当它遇到与您正在寻找的行匹配的行时,它都会跳过写出该行。然后,它会重命名输出文件。我省略了示例中的错误处理、读取器/写入器的关闭等。我还假设您要查找的行中没有前导或尾随空格。根据需要更改 trim(( 周围的代码,以便找到匹配项。
File inputFile = new File("myFile.txt");
File tempFile = new File("myTempFile.txt");
BufferedReader reader = new BufferedReader(new FileReader(inputFile));
BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));
String lineToRemove = "bbb";
String currentLine;
while((currentLine = reader.readLine()) != null) {
// trim newline when comparing with lineToRemove
String trimmedLine = currentLine.trim();
if(trimmedLine.equals(lineToRemove)) continue;
writer.write(currentLine + System.getProperty("line.separator"));
}
writer.close();
reader.close();
boolean successful = tempFile.renameTo(inputFile);