Файл не сохранен правильно - PullRequest
0 голосов
/ 16 апреля 2020

Я делаю функцию сохранения / загрузки настроек в моем приложении. После запуска программы она пытается найти файл. Если это не удается, он пытается создать файл с настройками по умолчанию (код ниже)

try (FileWriter fileWriter = new FileWriter(absolutePath))
        {
            fileWriter.write("theme=light\n");
            fileWriter.write("resolution=1280x720\n");
            fileWriter.write("printfps=false\n");

            System.out.println("Reset settings");
            load();
        }
        catch (FileNotFoundException e)
        {
            System.out.println("Settings File not found.");
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }

После того, как он это записал, он продолжает загружать файл. (вызов метода load ())

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

try (BufferedReader bufferedReader = new BufferedReader(new FileReader(absolutePath)))
        {
            String line = bufferedReader.readLine();
            System.out.println(line);
            while(line != null)
            {
                if (line.contains("="))
                {
                    String key = line;
                    String value = line;

                    while (key.contains("="))
                    {
                        key = key.substring(0, key.length() - 1);
                    }

                    while (value.contains("="))
                    {
                        value = value.substring(1);
                    }

                    settings.put(key, value);
                }

                System.out.println(line);
                line = bufferedReader.readLine();
            }
            System.out.println(settings);
        }

Однако возвращается, что файл пуст. После работы с точками останова, я могу подтвердить, что файл действительно не обновляется в этот момент. Довольно странная вещь заключается в том, что, если я приостанавливаю приложение позднее, файл, кажется, содержит текст, который был записан в него, даже если файл не затрагивается позже в программе.

Это заставляет меня Полагайте, что для обновления файла требуется некоторое время, что не приводит к своевременному обновлению метода load (). Это правильно, или я что-то упустил? И есть ли обходной путь?

Вся помощь приветствуется:)

1 Ответ

1 голос
/ 16 апреля 2020

Вы звоните load() до того, как сохраните файл. Чтобы сохранить файл, наберите fileWriter.close() или просто переместите вызов load() из блока try-with-resource с помощью FileWriter:

        try (FileWriter fileWriter = new FileWriter(absolutePath))
        {
            fileWriter.write("theme=light\n");
            fileWriter.write("resolution=1280x720\n");
            fileWriter.write("printfps=false\n");
        }
        catch (FileNotFoundException e)
        {
            System.out.println("Settings File not found.");
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        // FileWriter closed now and the file contents saved
        System.out.println("Reset settings");
        load();

...