java如何存储其他会话中使用的方法中的信息?
所以我正在制作一个程序来存储我和一些我正在辅导的孩子们的会议。它会记录会议时间、讨论以及我的工作时间。我知道如何编写所有的方法来实现这一点,但我的问题是,程序只会在程序打开的会话中保存这些信息。。。在程序关闭并再次打开后,我将如何存储这些信息并访问它们
这是我在java类中做的一个测试计分员程序的一些摘录,它也有同样的问题
public class Student {
private String name;
private int test1;
private int test2;
private int test3;
public Student() {
name = "";
test1 = 0;
test2 = 0;
test3 = 0;
}
public Student(String nm, int t1, int t2, int t3){
name = nm;
test1 = t1;
test2 = t2;
test3 = t3;
}
public Student(Student s){
name = s.name;
test1 = s.test1;
test2 = s.test2;
test3 = s.test3;
}
public void setName(String nm){
name = nm;
}
public String getName (){
return name;
}
public void setScore (int i, int score){
if (i == 1) test1 = score;
else if (i == 2) test2 = score;
else test3 = score;
}
public int getScore (int i){
if (i == 1) return test1;
else if (i == 2) return test2;
else return test3;
}
public int getAverage(){
int average;
average = (int) Math.round((test1 + test2 + test3) / 3.0);
return average;
}
public int getHighScore(){
int highScore;
highScore = test1;
if (test2 > highScore) highScore = test2;
if (test3 > highScore) highScore = test3;
return highScore;
}
public String toString(){
String str;
str = "Name: " + name + "\n" + //\n makes a newline
"Test 1: " + test1 + "\n" +
"Test 2: " + test2 + "\n" +
"Test 3: " + test3 + "\n" +
"Average: " + getAverage();
return str;
}
}
# 1 楼答案
可以使用db4o来持久化数据。它是一个带有spimple api的对象数据库。您可以存储java对象读取或删除它们
在这里下载DB4O
并使用本教程的片段(GER):Tutorial in German
下面是一个例子:
和代码:
# 2 楼答案
如果你的数据不是太大或太复杂,你可以将它保存到一个文件中,而这些数据在几天之后就可以保存在Rolodex中。向类中添加方法,这些方法将正确格式化数据,并将其写入给定的
OutputStream
或Writer
或任何内容。还有一种方法可以读回它要写入文件,请在程序菜单中添加一个选项“save”,选择该选项后,打开一个文件,遍历数据,并为每个对象调用save方法
要读取文件,请在程序菜单中添加“加载”选项,选择后打开一个文件,并使用读取每个对象的方法
用于读取的方法可以是类中的静态方法,该方法将首先查看文件中是否有任何数据,以及它是否能够正确读取这些数据,并且只有当它正确读取时,才会创建一个对象并返回它(否则返回null)。还有其他选项,但这是最能封装对象需求的选项
还有一个选项可以序列化和反序列化每个对象,并将其放入对象流中
如果数据很复杂,并且有许多对象之间有各种关系,那么应该使用数据库。这需要学习一些数据库设计和SQL
要演示文件读/写的想法,请在
Student
类中添加以下内容:这将写入一行,字段之间用“|”(垂直条)分隔。当然,你必须确保所有学生的名字都没有竖线。因此,您需要修改4参数构造函数和setter:
现在,为了读取文件,我们添加了一个静态方法:
你可以看到这更复杂,因为你需要检查每一步都是好的。在任何情况下,当情况不好时,我们返回
null
,但当然,您可以决定只显示一个警告并阅读下一行。但是,当没有更多行时,必须返回null因此,假设我们有一个
List<Student> students
,下面是我们如何将其写入文件。我只是选择了“students.txt”,但你可以指定一个完整的路径指向你想要的地方。请注意,在打开新文件之前,我是如何备份旧文件的。如果出现问题,至少你有以前版本的文件完成此操作后,如果您查找文件“students.txt”,您将看到您在其中写入的记录
读一下怎么样?假设我们有一个空的
students
列表(非空!):完成后,您可以检查
students
列表,除非文件中有错误,否则您的所有记录都会在那里当然,这是一个演示。您可能希望读入其他集合,或者不打印错误并返回,而是执行其他操作。但它应该给你一个想法