提问人:Vmir 提问时间:9/16/2021 更新时间:9/16/2021 访问量:608
在 TableView JavaFX 中显示文件中的数据
Displaying data from a file in a TableView JavaFX
问:
我正在尝试在 JavaFX 中创建一个简单的 ToDo 应用程序。用户输入的所有数据都将写入 txt 文件,然后从该文件中读取并显示在 TableView 中。 TableView 有三列,其中第一列表示用户的名称,第二列显示日期,第三列显示其他信息。当用户将数据输入到三列中时,将从用户输入并存储在文件中的三个参数(String name、String date、String additionalInfo)创建一个 Value 类。
使用以下方法将数据写入文件:
public void updateFile() {
//Deleting a file and creating a new one to update data
if (myFile.delete()) {
System.out.println("File deleted");
}
try {
if (myFile.createNewFile())
System.out.println("File created");
} catch (IOException e) {
e.printStackTrace();
}
StringBuilder stringBuilder = new StringBuilder();
//going through user's data
for(int i = 0; i<arrList.size(); i++){
for(int j=0; j< arrList.get(i).size();j++){
stringBuilder.append(arrList.get(i).get(j)+"\n");
}
}
try {
FileWriter myWriter = new FileWriter("file.txt");
myWriter.write(stringBuilder.toString());
myWriter.close();
blankLabel.setStyle("-fx-text-fill: green");
blankLabel.setText("Saved");
LabelAnimation la = new LabelAnimation(blankLabel, 3);
} catch (IOException e) {
e.printStackTrace();
}
}
假设用户输入 Name TextField:
John Overflow
放入 Date TextField:
12.02.2021
最后输入附加信息文本字段:
YAY!
该文件将包含以下值:
John Overflow
12.02.2021
YAY!
因此,输入的值将逐行存储在文件中 现在,当我想显示文件中
的值时,我调用以下方法:
public void setTableViewFromFile(){
try {
Scanner sc = new Scanner(myFile);
while(sc.hasNextLine()){
String name = sc.nextLine();//Name
String date = sc.nextLine();//Date
String info = sc.nextLine();//Additional Info
Value value = new Value(name, date, info);
tableView.getItems().add(value);
storeValue();//stores value in an ArrayList of values
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
此实现适用于单行字符串,但在用户在 AdditionalInfo TextField 中输入“\n”(换行符)时不起作用,因为此新行将被视为 Value 的单独参数。 举例说明:
TextField AdditionalInfo:
YAY!
I'm stuck!
Please Help me!
程序将终止并显示错误消息“未找到行”,因为
“YAY!”将被分配给一个 info String 并完成一个上一个 Value 类。
“I'm stuck!”将被分配给一个名称 String,“Please Help me!” 将分配给一个日期字符串和一个 Value 类,但是它不能被创建,因为它需要三个参数(name、date、info),而程序只提供两个(name 和 date)。
如何以不同的方式将数据存储在文件中,以便在扫描文件时,字符串名称仅分配文件中表示名称的值,仅分配字符串日期信息,仅分配字符串信息,仅分配字符串信息,仅分配其他信息,其中包括用户键入的所有内容?
答: 暂无答案
评论
updateFile()
RECORD SEPARATOR
,没有人推荐用于简单的项目。它有助于消除与使用或分离文件相关的许多问题。Tabs
Commas
Scanner
Files.readAllLines
List