Хобрук: Ваш путь к мастерству в программировании

Как сохранить определенное значение в логическом значении после остановки программы?

Я создал переменную класса следующим образом

private boolean xyz = false;

После чего я вызываю метод, который кое-что сделает, а затем изменю значение логической переменной на true.

Теперь в следующий раз, когда я повторно запускаю код, логическое значение не остается истинным, оно возвращается к ложному.

Я хочу, чтобы он оставался истинным, даже если я закрою свою программу, а затем снова запущу ее позже.

21.07.2012

Ответы:


1

Я хочу, чтобы он оставался истинным, даже если я закрою свою программу, а затем снова запущу ее позже.

Что ж, это означает, что вам нужно сохранить его где-то.

Варианты включают:

  • Где-то онлайн
  • База данных
  • Пользовательские настройки через API Preferences
  • Простой файл в известном месте

По сути, вам нужно записать данные куда-нибудь и прочитать их обратно при запуске. Трудно дать какой-либо более конкретный совет без дополнительного контекста.

21.07.2012
  • В настоящее время у меня есть два метода Method1 и Method2. У меня есть еще один фрагмент кода, который вызывает эти два метода. Логика заключается в том, что если логическое значение равно False, то будет вызван метод Method1, после чего он установит логическое значение в True. Прямо сейчас, когда я повторно запускаю код, логическое значение, если оно ложно, и поэтому Method1 вызывается каждый раз !!! Поэтому в следующий раз, когда я запускаю код, логическое значение должно быть истинным, и следует вызывать Method2. поэтому Method1 будет вызываться только один раз. 22.07.2012
  • @Nisarg: Да, если вы повторно запускаете новый процесс, который не выполнил ничего из того, что указано в моем ответе, вы забудете результат. Вот почему я дал ответ, который я сделал. 22.07.2012
  • Ok. я попробую один из вариантов, как вы предложили !! большое спасибо за твою помощь.. 22.07.2012

  • 2

    Когда вы выходите из своей программы, используйте ниже, чтобы сохранить вашу переменную в файл в вашем собственном местоположении, предпочтительно в локальном каталоге программы. Это называется сериализацией.

    try
          {
             FileOutputStream fileOut = new FileOutputStream("xyz.ser");//this saves to the directory where your program runs in
             ObjectOutputStream out = new ObjectOutputStream(fileOut);
             out.writeObject(xyz);
             out.close();
              fileOut.close();
          }catch(IOException i)
          {
              i.printStackTrace();
          }
    

    Затем, когда вы запускаете свою программу, вы можете прочитать ее с помощью кода ниже. Это называется десериализацией.

    try
             {
                FileInputStream fileIn = new FileInputStream("xyz.ser");
                ObjectInputStream in = new ObjectInputStream(fileIn);
                xyz = (boolean) in.readObject();
                in.close();
                fileIn.close();
            }catch(IOException i)
            {// you are here if xyz.ser does not exist
                i.printStackTrace();
                return;
            }
    

    Вы также можете проверить, был ли файл создан ранее, иначе вы поймаете исключение IOException. Вы можете сделать это, создав объект File с именем файла xyz.ser и вызвав его exists().

    21.07.2012
  • Так что, если файл существует. Я имею в виду, что во второй раз, когда я запускаю программу, файл уже будет там, поэтому file.exists() == True. Тогда что мне делать, я должен все еще создавать объекты fileoutputstream и objectoutputstream ?? 22.07.2012
  • Вы можете без опасений выполнить часть сериализации, потому что она автоматически создаст для вас файл и перезапишет его во второй раз и так далее. Для десериализации, когда вы считываете переменную, если файл существует, вы должны сделать то, что должно быть сделано, если нет -> это первый раз, когда ваша программа запускается, поэтому ничего не делайте и сохраните переменную при выходе. В следующий раз файл будет там, и вы сможете прочитать его обратно. 22.07.2012
  • Новые материалы

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..