How can I be notified when a file is modified and saved??

Apache NetBeans Wiki Index

Note: These pages are being reviewed.

The DataObject.Registry in LoadersAPI gives you a set of modified DataObjects. You can also add a listener and be notified when the set of modified objects changes.

If you have a FileObject and want to listen for save events, you will need to get its DataObject by calling DataObject.find().

To listen on a single DataObject for save events, simply add a PropertyChangeListener and listen for changes in DataObject.PROP_MODIFIED.

Note that listening for something to be saved is not the same as listening for any changes in the file - you are really listening only for (directly or indirectly) user-initiated save events, as in the user pressing CTRL-S when the file is modified and opened in the editor. For notifications about any changes in a file, instead attach a FileChangeListener to the underlying FileObject.

Track the currently modified files by DataObject Registry listening - Sample code

DataObject.Registry registries = DataObject.getRegistry();
registries.addChangeListener(new ChangeListener() {
    public void stateChanged(ChangeEvent e) {
        System.out.println("ChangedListener: o = " + e.getSource().getClass());
        System.out.println("ChangedListener: o.source = " + e.getSource());
    }
});
DataObject[] objects = registries.getModified();
for (int i = 0; i < objects.length; i++) {
    DataObject dataObj = objects[I];
    System.out.println("data object name = " + dataObj.getName());
    System.out.println("data object pimary file name = " + dataObj.getPrimaryFile().getName());
    Set fss = dataObj.files();
    Iterator iter = fss.iterator();
    while (iter.hasNext()) {
        FileObject fo = (FileObject) iter.next();
        System.out.println("\tset file object: " + fo.getName());
    }
}

Libraries needed

  • Datasystems API

  • File System API

  • Nodes API

  • Utilities API