如何在读取文件之前更新文件内容?
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")
我正在编写一个程序,该程序要求我能够将人员的个人详细信息写入 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")