Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在读取文件之前更新其内容?_Java_Excel_Csv_Combobox_Filereader - Fatal编程技术网

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

Java 如何在读取文件之前更新其内容?,java,excel,csv,combobox,filereader,Java,Excel,Csv,Combobox,Filereader,我正在编写一个程序,要求我能够将个人详细信息写入excel文件。然后,我必须能够读取此文件的内容,并将其显示在组合框中。但是,当前如果我运行程序并输入一个人的详细信息,然后使用组合框选择其中一个人,则在当前程序运行过程中输入的任何人都不会显示在组合框中。但是,如果我关闭程序并再次运行它,它们就会出现。我怎样才能解决这个问题 String csvFile = "Clients.csv"; BufferedReader br = null; String line =

我正在编写一个程序,要求我能够将个人详细信息写入excel文件。然后,我必须能够读取此文件的内容,并将其显示在组合框中。但是,当前如果我运行程序并输入一个人的详细信息,然后使用组合框选择其中一个人,则在当前程序运行过程中输入的任何人都不会显示在组合框中。但是,如果我关闭程序并再次运行它,它们就会出现。我怎样才能解决这个问题

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文件中输入了新条目

您应该编写一段代码,当您点击“添加人员”按钮(或您在程序中的任何调用)时更新csv文件,然后触发一个新的BufferedReader

编辑:

我不知道您的程序是gui还是控制台应用程序,但我将尝试解释一下,就像我们在谈论gui一样

步骤-1-->当用户在程序的文本区域中填写新人员的详细信息时,或者当用户点击“添加人员”按钮时,您应该存储此人的详细信息

步骤-2-->然后必须创建写入程序实例。此实例必须将新数据附加到csv文件中

BufferedWriter writer = new BufferedWriter(new FileWriter(csvFile));
writer.write("\n" + newPersonDataasString + "\n");
步骤-3-->最后,必须使用csv文件提供的新BufferedReader再次读取文件

正如表中提到的,将这些步骤包装到诸如readFile()、writeFile()等自定义方法中,对于维护目的来说是一个很好的解决方案


现在,如果我指示错误,请告诉我。

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

因此,最好的方法是有两个功能:

  • readFile(filename)
    将使用
    BufferedReader
    读取文件(创建、使用和关闭)

  • writeFile(filename,contentToWrite)
    将使用
    BufferedWriter
    写入文件(该文件也已创建、使用和关闭)

每次添加一个人时,请调用
writeFile(“your.csv”,即您的数据)

每次您想显示csv中的数据(例如列出存储在中的所有人员),请致电
readFile(“your.csv”)

我不确定如何更新该文件,或在何处添加新的BufferedReader。编辑了我的答案。对,您说我需要一个新的BufferedReader,那么您的意思是我需要2,或者在写入文件后只创建一个?我想您必须创建两个实例。应该会有帮助。我正在努力理解你的意思,你不可能编辑我的代码来告诉我吗?我不太明白如何应用你告诉我的内容。简单地说,你不能只使用BufferedReader的一个实例来读取你的文件并查看你在该文件中所做的更改。每次编辑CSV时,您都必须再次打开它(您在问题中输入的代码)。这意味着您需要创建BufferedReader,读取行(br.readLine),将数据存储到值中并关闭它。我建议您创建两个函数,因为您似乎多次读取和写入CSV文件。那么每个BufferedReader都来自何处?每次读取CSV文件时。如果需要显示CSV文件的数据,请创建BufferedReader,读取数据并将其存储在变量(数组、ArrayList等)中,然后关闭它。然后做一些事情(例如在文件中写一个新人)。然后,当您想再次显示带有更改的数据时,执行相同的操作:创建一个缓冲区,读取数据,将其存储在变量中,然后关闭缓冲区。您可以通过创建一个执行此过程的函数并返回一个数组(或ArrayList,无论您喜欢什么)来实现这一点。每次需要读取数据时,调用此函数。这可能会对您有所帮助,我懒得为您编写代码。