您好我正在编写一个存储用户输入的任务的程序。现在我编写了一个Task Object类。我有用于将对象任务序列化到文件上的代码。我不知道如何自动创建和标记任务(例如:task1,task2,task3)。如果用户输入多个任务,我需要能够执行此操作,以便我可以组织它们。基本上:如何自动创建和标记任务,并序列化存储和组织任务的最佳选项?
import java.io.Serializable;
public class Task extends TaskProcessing implements Serializable
{
//number of the task
//int taskNumber;
//how long the task will take to do
//double lengthOfTask;
//mm/dd/yyyy date the task is to be worked on
//String date;
//low medium high priority
//String priority;
//morning, afternoon, evening, night
//String timeSlot;
//hh/mm time the task starts
String time;
//work/study/personal categories for the task
//String catagory;
//reminders
//String reminder;
// There some more variables
public void setTime(String time)
{
this.time = time;
}
// There some more variables
public String getTime()
{
return this.time;
}
@Override
public String toString() {
return new StringBuffer(" Street : ")
.append(this.time).toString();
}
}
这是存储对象的代码
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Serializer
{
public static void serializerTask (String args[])
{
Serializer serializer = new Serializer();
serializer.serializeTask("1:00");
}
public void serializeTask(String time)
{
Task task = new Task();
task.setTime(time);
try{
FileOutputStream fout = new FileOutputStream("c:\\task.ser");
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(task);
oos.close();
System.out.println("Done");
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
答案 0 :(得分:0)
您可以使用某种静态变量,它将作为文件名的前缀或后缀。它应该在使用后改变。如果使用stati字段,给定类的所有对象将使用完全相同的字段(它在所有实例之间共享)
private static Integer suffix=0; // in declaration
FileOutputStream fout = new FileOutputStream("c:\\task"+(suffix++)".ser"); // later in code
这不是线程安全的解决方案,但为了使其线程安全,我们需要使用static AtomicInteger
并使用其方法,例如。 getAndIncrement()
。这相当于suffix++
,但是以线程安全的方式。
答案 1 :(得分:0)
在antoniossss的答案基础上扩展:
为类提供一个idgenerator并为每个实例提供唯一的id。以粗暴的方式,如:
public class Task extends TaskProcessing implements Serializable
{
private static final AtomicInteger ID_GENERATOR=new AtomicInteger(0);
private final int id;
//.....
public Task()
{
id=ID_GENERATOR.getAndIncrement();
//...
}
}
然后在文件名中使用该ID作为您编写任务的文件,否则每次保存新任务时都有可能覆盖上次保存的任务。此外,即使您将所有任务追加到同一个文件中,也很难读取(反序列化)一个任务,甚至更难在文件中更新它。
尽管如此,请记住,这种持久存储用户输入数据的方式非常粗糙。您正在有效地实现自己的文件存储。这可能是一个很好的练习,但如果它是更多的东西,你最好通过使用更合适的存储方式,如数据库。