JavaFX - таблица показывает данные, но при сохранении в файл файл пуст - PullRequest
0 голосов
/ 02 марта 2020

В моей программе я читаю файл конфигурации (файл .txt) и показываю содержимое в виде таблицы. Это работает.

Просмотр таблицы с данными

Второй столбец можно редактировать. Это служит конфигурационным файлом для программы. Если я сейчас сохраню данные (Файл - Сохранить), файл конфигурации будет пустым. Я не имею понятия почему. Вот код:

Файл - Сохранить вызывает это:

    @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-l oop. Это позволяет мне думать, что нет данных. Но почему? Я вижу данные.

Я уверен, что мне просто не хватает мелочи. Любая помощь приветствуется. Файл конфигурации составлял 127 байт, когда я его читал, и теперь равен 0.

Спасибо,

Майкл

1 Ответ

0 голосов
/ 02 марта 2020

Я понял это. Проблема была в этой строке кода в методе saveConfig () контроллера

SCDConfigDataAccess configData = new SCDConfigDataAccess();

Это создает новый экземпляр и не имеет связи с данными. Вместо этого я использую экземпляр, определенный в самом классе контроллера, следующим образом:

public class SCDConfigController {
private SCDConfigDataAccess configDataAccess;
    public void saveConfig() throws IOException {
    configDataAccess.saveData(SCDController.configFile);
    closeConfig();
}//saveConfig

И это, конечно, работает.

...