0

I am currently working on a small project to improve my programming skills, so not every “feature” might seem practical. Part of the application is a way to write notes and save them to a JList. While this notes-object is created, the content of the note (title and text) is saved to a .properties file. I picked the property-object because I needed some kind of key to allocate the content (text and title) to.

The Part for saving notes and creating the .properties file is working fine. But after closing and opening the application I want to populate the JList with the data in the .properties file. My problem now is that I want that the notes load in the same order as they were created in the first place. So if I create note a,b,c and close the application, I want that they load in this same order and I have a,b,c in my list again.

So I thought I’ll put the index of each file into the filename. This way the order in the notes directory on my hard disk is the same as in my JList. But this only works fine until you start deleting notes which messes up the order on the hard disk because of the id. Can anyone give me a tip on how to solve this problem? I need a way to load the files in the same order they were created.

Here is the Code for adding notes:

 private class AddNoteAction implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {

        // Initialize variables
        Properties data = new Properties();
        FileOutputStream oStream = null;

        // Create instance of note with the given text 
        String text = fldText.getText();
        String title = fldTitle.getText();
        Note note = new Note(text, title);

        // Create new file in notes directory to save properties data
        File file = new File(Config.NOTES_DIR, note.getId() + title + ".properties");

        // Save data from userinput to properties file (date and id are being set when a new note object is created)
        data.setProperty("title", title);
        data.setProperty("text", text);
        data.setProperty("created", note.getDate());
        data.setProperty("id", String.​valueOf(​note.​getId(​)));​

        // Write data from properties to file on the drive
        try {
            oStream = new FileOutputStream(file);
            data.store(oStream, Config.APP_NAME + " Notes Data");
        } catch (IOException e1) {
            e1.printStackTrace();
        }finally {
            if(!(oStream == null)){
                try {
                    oStream.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }

        // Add note to model
        noteListModel.addNote(note);

        // Clear Textfields after adding Note
        fldText.setText("");
        fldTitle.​requestFocusInWindow(​);​
        fldTitle.setText("");

    }

}

Here is the code for loading the notes:

 public class LoadNotes {
// Initialize Variables
private NoteListModel noteModel;
private File folder = new File(Config.NOTES_DIR);
private File[] files = folder.listFiles();
private Properties data = new Properties();
private FileInputStream iStream = null;

// Load ListModel when creating instance of this class
public LoadNotes(NoteListModel noteModel){
    this.noteModel = noteModel;
}

// Load text-files data from notes directory into properties and create new note
public void load(){
    for (File file : files){
        if(file.isFile()){
            try {
                iStream = new FileInputStream(file);
                data.load(iStream);
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(!(iStream == null)){
                    try {
                        iStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }

            // Read data from file to property
            String title = data.getProperty("title");
            String text = data.getProperty("text");
            int id = Integer.​parseInt(​(​data.​getProperty(​"id")​));​

            // Create new note instance and save to model
            Note note = new Note(text,title);
            noteModel.addNote(note);
        }
    }
} 
Corovus
  • 38
  • 4
  • What about ordering the files by creation date before loading them in the JList? http://stackoverflow.com/questions/203030/best-way-to-list-files-in-java-sorted-by-date-modified In the title is stated "modified date" but I think that the solutions provided will work with creation as well. – RubioRic Apr 06 '16 at 11:15
  • You are absolutely right. I didn't think of comparing them by creation date. The solution you linked works perfect for what i need, thanks :). – Corovus Apr 06 '16 at 18:13
  • You're welcome. Glad to help. :-) – RubioRic Apr 06 '16 at 19:55

0 Answers0