2015-03-23 2 views
0

Привет Я пишу программу, в которой хранятся задачи, которые пользователь вводит. Теперь у меня есть класс объекта задачи, написанный. У меня есть код для сериализации объекта Tasks в файле. Я не знаю, как создавать и маркировать задачи автоматически (например: 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(); 
    } 
} 
} 
+2

Вы можете создавать несколько объектов одного класса, а не объекта. – Antoniossss

+0

Вы можете 'clone()' a 'Object', если класс' реализует Cloneable' ... :-) –

+0

Из API: http://docs.oracle.com/javase/7/docs/api/java/ io/FileOutputStream.html FileOutputStream предназначен для записи потоков необработанных байтов, таких как данные изображения. Для записи потоков символов рассмотрите возможность использования FileWriter. –

ответ

0

Вы можете использовать какой-то статической переменной, которая будет действовать как префикс или суффикс для имен файлов. Он должен измениться после использования. Если вы используете Стати поля, все объекты данного класса будут использовать один и то же поле (оно разделяется между всеми экземплярами)

private static Integer suffix=0; // in declaration 

FileOutputStream fout = new FileOutputStream("c:\\task"+(suffix++)".ser"); // later in code 

Это не поточно безопасным решением, но, чтобы сделать его поточно, мы должны использовать static AtomicInteger и использовать его метод, например. getAndIncrement(). Это эквивалентно suffix++, но в потоковом безопасном режиме.

0

Расширение на основе заложенной в ответ на antoniossss:

Дайте классу в idgenerator и дать каждому экземпляру уникальный идентификатор. В сырой форме, что-то вроде:

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(); 
     //... 
    } 
} 

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

Хотя, действительно, имейте в виду, что этот способ хранения данных, введенных пользователем, очень груб. Вы эффективно реализуете свое собственное филе. Это может быть хорошим упражнением, но если это что-то большее, вам, скорее всего, будет лучше, если вы используете более подходящий способ хранения, такой как база данных.

+0

Значит, у меня есть файл для каждой задачи? –

+0

@Josiah L. В описанном выше сценарии да. – Buurman

Смежные вопросы