JavaFX - 表格视图显示数据但保存到文件时,文件为空
JavaFX - tableview shows data but when saving to file, the file is empty
在我的程序中,我读取了一个配置文件(.txt 文件)并在表格视图中显示了内容。行得通。
Tableview with data
可以编辑第二列。这用作程序的配置文件。
如果我现在保存数据(文件 - 保存),则配置文件为空。我不知道为什么。这是代码:
文件 - 保存调用这个:
@FXML
public void saveConfig() throws IOException {
System.out.println("File - Save clicked");
SCDConfigDataAccess configData = new SCDConfigDataAccess();
configData.saveData(SCDController.configFile);
closeConfig();
}//saveConfig
和configData.saveData这样做:
public class SCDConfigDataAccess {
private static ObservableList<SCDConfigData> scdConfig;
public void saveData(File configFile) throws IOException {
BufferedWriter bw = Files.newBufferedWriter(Paths.get(configFile.getPath()));
String output = "";
System.out.println("File: " + configFile.getPath());
try {
for (SCDConfigData data : scdConfig) {
output = data.getsConfigType() + "=" + data.getsConfigValue() + "\n";
System.out.println("Data: " + output);
bw.write(output); }
bw.flush();
bw.close();
}catch(IOException e){ System.out.println("Error: " + e.getMessage()); }
} //saveData
}//class
我收到这些消息:
文件 - 单击保存
文件:C:\Users\Michael\AppData\Local\SCD\scdconfig.ini
这些是正确的。
我没有从 for 循环中得到消息。这让我认为没有数据。但为什么?我看到数据了。
我确定我只是漏掉了一点东西。感谢任何帮助。
配置文件我读的时候是127字节,现在是0.
谢谢,
迈克尔
我明白了。问题出在控制器的方法 saveConfig() 中的这行代码
SCDConfigDataAccess configData = new SCDConfigDataAccess();
这将创建一个新实例,并且与数据没有连接。我没有这样做,而是使用控制器 class 本身定义的实例,如下所示:
public class SCDConfigController {
private SCDConfigDataAccess configDataAccess;
public void saveConfig() throws IOException {
configDataAccess.saveData(SCDController.configFile);
closeConfig();
}//saveConfig
这当然有效。
在我的程序中,我读取了一个配置文件(.txt 文件)并在表格视图中显示了内容。行得通。
Tableview with data
可以编辑第二列。这用作程序的配置文件。 如果我现在保存数据(文件 - 保存),则配置文件为空。我不知道为什么。这是代码:
文件 - 保存调用这个:
@FXML
public void saveConfig() throws IOException {
System.out.println("File - Save clicked");
SCDConfigDataAccess configData = new SCDConfigDataAccess();
configData.saveData(SCDController.configFile);
closeConfig();
}//saveConfig
和configData.saveData这样做:
public class SCDConfigDataAccess {
private static ObservableList<SCDConfigData> scdConfig;
public void saveData(File configFile) throws IOException {
BufferedWriter bw = Files.newBufferedWriter(Paths.get(configFile.getPath()));
String output = "";
System.out.println("File: " + configFile.getPath());
try {
for (SCDConfigData data : scdConfig) {
output = data.getsConfigType() + "=" + data.getsConfigValue() + "\n";
System.out.println("Data: " + output);
bw.write(output); }
bw.flush();
bw.close();
}catch(IOException e){ System.out.println("Error: " + e.getMessage()); }
} //saveData
}//class
我收到这些消息:
文件 - 单击保存
文件:C:\Users\Michael\AppData\Local\SCD\scdconfig.ini
这些是正确的。
我没有从 for 循环中得到消息。这让我认为没有数据。但为什么?我看到数据了。
我确定我只是漏掉了一点东西。感谢任何帮助。
配置文件我读的时候是127字节,现在是0.
谢谢,
迈克尔
我明白了。问题出在控制器的方法 saveConfig() 中的这行代码
SCDConfigDataAccess configData = new SCDConfigDataAccess();
这将创建一个新实例,并且与数据没有连接。我没有这样做,而是使用控制器 class 本身定义的实例,如下所示:
public class SCDConfigController {
private SCDConfigDataAccess configDataAccess;
public void saveConfig() throws IOException {
configDataAccess.saveData(SCDController.configFile);
closeConfig();
}//saveConfig
这当然有效。