CSV文件无法更新

问题描述 投票:0回答:1

我想做一个给学生打分的程序。

首先它应该询问学生的ID,然后你需要给同一个学生的每个标准的分数。

这个代码并没有改变任何东西后,我给的分数。

BufferedReader br = new BufferedReader(new FileReader("project.csv"));
while ((line = br.readLine()) != null) {
    String[] cols = line.split(",");
    System.out.println("Please choose a criteria (2-7) ?");
    int subjectToGiveMark = in .nextInt(); // for creativity is 2
    System.out.println("Please enter a mark :");
    int mark = in .nextInt(); // which mark should be given 
    final int size = cols.length;
    String[] finalResult = new String[size];
    int index = 0;

    while (index < finalResult.length) {
        if (index == subjectToGiveMark) {
            finalResult[index] = mark + "";
        } else {
            finalResult[index] = cols[index];
        }
        index++;
    }
}

谁能告诉我这是什么问题?请在这里输入图片描述

java arrays string csv bufferedreader
1个回答
0
投票

首先,为了安全起见,你应该用try with resources来读取或写入你的文件,因为你可能会忘记关闭文件,甚至一个异常会阻止你这样做。

try-with-resources语句可以确保每个资源在语句结束时被关闭。

- Java™教程

更多信息。https:/docs.oracle.comjavasetutorialessentialexceptionstryResourceClose.html。

怎么说?比如你现在看的内容,就用try来包装。

try (BufferedReader br = new BufferedReader(new FileReader("project.csv"))) {
  // The while code here...
}

你还修改了 finalResult 变量,但并没有对它做任何事情,所以你的变化只是存储在那里,没有更多的东西,这就是为什么你看不到你的变化!你应该在while循环之外创建一个变量,存储所有的行,就像一个列表。

你应该在while循环外创建一个变量,存储所有的行,就像一个列表。否则你可以打开另一个文件(例如 project-output.csv),并在读取其他文件的同时将其写入。

// Same principle as reading
try (BufferedWriter writer = new BufferedWriter(new FileWriter("project.csv"))) {
  // Write the result
}

这个答案更详细地解决了写的问题。https:/stackoverflow.coma28852241842548。

读写的例子,我假设是Java 8。

try (BufferedWriter writer = new BufferedWriter(new FileWriter("project-output.csv"))) {
  try (BufferedReader reader = new BufferedReader(new FileReader("project.csv"))) {
    String line;
    while ((line = reader.readLine()) != null) {
        String[] cols = line.split(",");
        System.out.println("Please choose a criteria (2-7): ");
        final int subjectToGiveMark = in.nextInt(); // for creativity is 2
        System.out.println("Please enter a mark: ");
        final int mark = in.nextInt(); // which mark should be given
        cols[subjectToGiveMark] = Integer.toString(mark);
        // Here is where you write the output:
        writer.write(String.join(",", cols));
        writer.newLine();
    }
    writer.flush();
  }
}

你可以在repl.it上看到一个工作实例 https:/repl.itreplsScaredSeriousCookie。

© www.soinside.com 2019 - 2024. All rights reserved.