DataLoaders recognize files by type - type is typically determined by the file extension, though it can depend on content for things like XML files. They are the mechanism by which NetBeans recognizes files.
DataLoaders are factories for DataObjects. Typically there is a 1:1 mapping between file-type:DataLoader-subclass and a 1:1 mapping from files:DataObject instances for files that are visible in the UI. When a file is encountered, a DataLoader is found and used to produce a DataObject for that file.
Modules that provide the ability the system to open (or otherwise use) files of a particular type will register DataLoaders for those types. When the system needs to display a file in the UI, or when some code calls DataObject.find(someFileObject), the registered loaders are queried and one of them will claim it, and create a DataObject to represent it. So typically for each file type (as defined by file name extension, or XML subtype) there is a matching DataObject subclass.
DataLoaders are registered in the module manifest - for example:
Name: org/netbeans/modules/povray/PovDataLoader.class OpenIDE-Module-Class: Loader
Note that the empty line above the Name: line must be present; create such entries at the bottom of the module manifest.
Source: NetBeans FAQ