如何在读取文件之前更新文件内容?

How do I update the contents of a file before reading it?

我正在编写一个程序,该程序要求我能够将人员的个人详细信息写入 excel 文件。然后我必须能够读取该文件的内容并将它们显示在组合框中。然而,目前如果我 运行 程序并输入一个人的详细信息,然后使用组合框 select 这些人之一,任何人都进入当前 运行-through 程序不会显示在组合框中。但是,如果我关闭程序并再次 运行 它,它们就会出现。我该如何解决这个问题?

String csvFile = "Clients.csv";
        BufferedReader br = null;
        String line = "";
        String cvsSplitBy = ",";
        String fullName = null;

        try {
            File file = new File("Clients.csv");
            br = new BufferedReader(new FileReader(file));
            while ((line = br.readLine()) != null) {
                String[] data = line.split(cvsSplitBy);
                fullName = data[0]+" "+data[1];
                comboBox_1.addItem(fullName);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        //FILE READING END
        comboBox_1.setBounds(130, 25, 584, 20);
        existingClients.add(comboBox_1);

当您 运行 您的程序时,您的 BufferedReader 会收到包含当前数据的 csv 文件。在 运行 时间内,您的程序不知道您是否在 csv 文件中输入了新条目。

您应该编写一段代码,当您点击 "Add Person" 按钮(或您在程序中调用的任何内容)时更新 csv 文件,然后触发一个新的 BufferedReader。

编辑:

我不知道您的程序是 gui 还是控制台应用程序,但我会尽量解释为好像我们在谈论 gui。

Step - 1 --> 当用户在你的程序的文本区域中填写新人的详细信息时,或者当 s/he 点击 "Add Person" 按钮时,你应该存储详细信息这个人。

Step - 2 -->然后你必须创建一个writer实例。此实例必须将新数据附加到您的 csv 文件;

BufferedWriter writer = new BufferedWriter(new FileWriter(csvFile));
writer.write("\n" + newPersonDataasString + "\n");

步骤 - 3 -->最后,您必须使用新的 BufferedReader 再次读取您的文件,该 BufferedReader 包含您的 csv 文件。

如 exe-cute-table 所述,将这些步骤包装到自定义方法中,如 readFile()、writeFile() 是维护目的的一个很好的解决方案。

如果我误导了你,请让我告诉你。

每次写入文件时,您都必须再次打开它(像您一样使用 BufferedReader)才能看到更改。 BufferedReader 一旦创建,将不会存储 CSV 文件的新更改。

所以最好的办法就是有两个函数:

  • readFile(filename) 将使用 BufferedReader(创建、使用和关闭)

  • 读取文件
  • writeFile(filename, contentToWrite) 将使用 BufferedWriter(也创建、使用和关闭)

  • 写入文件

每次添加一个人,调用writeFile("your.csv", your_data)。 每次您想显示 csv 中的数据(例如列出存储在其中的所有人)时,请调用 readFile("your.csv")