像pickle一样在Java中存储数据的最佳方法
Posted
技术标签:
【中文标题】像pickle一样在Java中存储数据的最佳方法【英文标题】:best way to store data in Java like pickle 【发布时间】:2020-06-13 07:37:53 【问题描述】:基本上,我只想将两个整数保存到一个文件中,以便下次程序启动时可以重用它们。我喜欢在 python 中像 pickle 一样做,因为把它写到一个 txt 文件中很麻烦。我已经阅读了一些文章和其他问题,他们说我应该使用 Java 序列化或 XML 或 JSON,但我不确定在我的情况下这是否正确。我想用最简单的方法。 非常感谢您尝试解决我的问题!
【问题讨论】:
【参考方案1】:您可以使用序列化、XML 或 JSON(通常带有额外的库)。将配置数据存储在文件中的一种简单方法是使用 JRE 支持的 Java 属性文件,而无需任何额外的依赖项。属性文件是文本文件,具有简单的key=value
语法,见下文。要将两个值写入属性文件,您可以这样做
String prop1 = "foo";
String prop2 = "bar";
try (OutputStream output = new FileOutputStream("config.properties"))
Properties prop = new Properties();
// set the properties value
prop.setProperty("prop1", prop1);
prop.setProperty("prop2", prop2);
// save properties to project root folder
prop.store(output, "my app's config file");
catch (IOException io)
io.printStackTrace();
// TODO: improve error handling
应该会给你类似的东西
#my app's config file
#Sat Feb 29 12:29:27 CET 2020
prop2=bar
prop1=foo
然后加载它:
try (InputStream input = new FileInputStream("config.properties"))
Properties prop = new Properties();
// load a properties file
prop.load(input);
// get the property value and print it out
String prop1 = prop.getProperty("prop1");
String prop2 = prop.getProperty("prop2");
System.out.println("prop1 = " + prop1);
System.out.println("prop2 = " + prop2);
catch (IOException ex)
ex.printStackTrace();
// TODO: improve error handling
对于整数值,您需要进行一些类型转换,例如前两行是
String prop1 = Integer.toString(23);
String prop2 = Integer.toString(42);
然后读取属性就变成了
int prop1 = Integer.parseInt(prop.getProperty("prop1"));
int prop2 = Integer.parseInt(prop.getProperty("prop2"));
如果属性数量增加或频繁更改,此解决方案无法很好地扩展。有关更通用的过程,请参阅此帖子:Get int, float, boolean and string from Properties
【讨论】:
非常感谢,它可以工作,但我不确定,因为在我的情况下,用户不应该能够更改值,而 .property 文件不就是这种情况吗? @JGStyleSSBU:您要求一种解决方案来保持软件两次运行之间的数字,您的想法是将它们存储在磁盘上的文件中。用户可以修改磁盘上的任何文件,只要您不通过应用访问权限和东西采取一些预防措施……无论该文件是属性文件还是其他文件。为了使值远离用户,请设置一个服务(如数据库或 Zookeeper 或其他东西)来存储数字……但我认为这对于您的要求来说太大了。也许您想看看 Java 中的 Preferences API? 我只是将变量的 James 更改为 Dome Numbers,以便 Theo the User Dozent 知道他在做什么 我保存的所有文件都增加了一个命中数以上是关于像pickle一样在Java中存储数据的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章