Java 如何在程序停止后保持布尔值?
我创建了一个类变量,如下所示Java 如何在程序停止后保持布尔值?,java,boolean,Java,Boolean,我创建了一个类变量,如下所示 private boolean xyz = false; 之后,我调用一个方法,该方法将执行一些操作,然后将布尔变量的值更改为true 现在,下次我重新运行代码时,布尔值不再保持为true,而是返回为false 我希望它保持真实,即使我关闭我的程序,然后再次运行它 我希望它保持真实,即使我关闭我的程序,然后再次运行它 这意味着你需要在某个地方坚持下去 选择包括: 网上某处 数据库 通过API的用户偏好 位于已知位置的简单文件 基本上,您需要将数据写到某个地方,
private boolean xyz = false;
之后,我调用一个方法,该方法将执行一些操作,然后将布尔变量的值更改为true
现在,下次我重新运行代码时,布尔值不再保持为true,而是返回为false
我希望它保持真实,即使我关闭我的程序,然后再次运行它
我希望它保持真实,即使我关闭我的程序,然后再次运行它
这意味着你需要在某个地方坚持下去
选择包括:
- 网上某处
- 数据库
- 通过API的用户偏好
- 位于已知位置的简单文件
- 网上某处
- 数据库
- 通过API的用户偏好
- 位于已知位置的简单文件
基本上,您需要将数据写到某个地方,然后在启动时重新读取。如果没有更多的上下文,很难给出更具体的建议。退出程序时,使用下面的命令将变量保存到您自己的文件中,最好是程序的本地目录。这称为序列化 然后,当你启动你的程序时,你可以用下面的代码读回它。这称为反序列化
您可能还需要检查文件是否是以前创建的,否则,您将捕获IOException。您可以通过创建一个文件名为xyz.ser的文件对象并对其调用exists()。退出程序时,使用下面的命令将变量保存到您自己的文件中,最好是程序的本地目录。这称为序列化 然后,当你启动你的程序时,你可以用下面的代码读回它。这称为反序列化
您可能还需要检查文件是否是以前创建的,否则,您将捕获IOException。您可以通过创建一个文件名为xyz.ser的文件对象并对其调用exists()。我目前有两种方法Method1和Method2。我有另一段代码调用这两个方法。逻辑是,如果布尔值为False,那么将调用Method1,然后将布尔值设置为True。现在,当我重新运行代码时,布尔值if false,因此每次调用Method1!!!所以下次我运行代码时,布尔值应该为true,并且应该调用Method2。因此Method1将只被调用一次。@Nisarg:是的,如果您在一个新的进程中重新运行,而该进程没有完成我回答中的任何操作,您将“忘记”结果。这就是为什么我给出了答案。我将按照您的建议尝试其中一个选项!!非常感谢你的帮助。我目前有两种方法Method1和Method2。我有另一段代码调用这两个方法。逻辑是,如果布尔值为False,那么将调用Method1,然后将布尔值设置为True。现在,当我重新运行代码时,布尔值if false,因此每次调用Method1!!!所以下次我运行代码时,布尔值应该为true,并且应该调用Method2。因此Method1将只被调用一次。@Nisarg:是的,如果您在一个新的进程中重新运行,而该进程没有完成我回答中的任何操作,您将“忘记”结果。这就是为什么我给出了答案。我将按照您的建议尝试其中一个选项!!非常感谢你的帮助…如果文件存在该怎么办。我的意思是说,当我第二次运行程序时,文件已经存在,因此file.exists()==True。那么我应该怎么做,我应该仍然创建fileoutputstream和objectoutputstream对象吗?您可以毫不担心地执行序列化部分,因为它会自动为您创建文件并第二次覆盖它,依此类推。对于反序列化,当您读回变量时,如果文件存在,您应该执行要执行的操作,如果不存在->这是您的程序第一次运行,因此不执行任何操作,并在退出时保存变量。下一次,该文件将在那里,您可以将其读回。那么,如果该文件存在呢。我的意思是说,当我第二次运行程序时,文件已经存在,因此file.exists()==True。那么我应该怎么做,我应该仍然创建fileoutputstream和objectoutputstream对象吗?您可以毫不担心地执行序列化部分,因为它会自动为您创建文件并第二次覆盖它,依此类推。对于反序列化,当您读回变量时,如果文件存在,您应该执行要执行的操作,如果不存在->这是您的程序第一次运行,因此不执行任何操作,并在退出时保存变量。下次,该文件将在那里,您可以将其读回。
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;
}