
The FileSystemResourceReference comes along with the FileSystemResource, FileSystemResourceStreamReference and the FileSystemResourceStream. Those classes provide a simple way to handle resources with Java's NIO API in Wicket starting from JDK version 7.0. (Available since Wicket 7.2.0 / Wicket 8.0.0)

Example: To include a resource which is zipped into a file and located in a specific folder in the file system you can simply write code like this:

Java:
[source,java]
----
URI uri = URI.create("jar:file:///videosFolder/videos.zip!/folderInZip/Video.mp4");
Path path = FileSystemResourceReference.getPath(uri);
FileSystemResourceReference ref = new FileSystemResourceReference("video",path);
Video video = new Video("video",ref);
add(video);
----

HTML:
[source,java]
----
<video wicket:id="video"/>
----

Using FileSystemResourceReference mounted:

Java:
[source,java]
----
mountResource("/filecontent/${name}", new FileSystemResourceReference("filesystem")
{
	private static final long serialVersionUID = 1L;

	@Override
	public IResource getResource()
	{
		return new FileSystemResource()
		{
			private static final long serialVersionUID = 1L;

			protected ResourceResponse newResourceResponse(Attributes attributes)
			{
				try
				{
					String name = attributes.getParameters().get("name").toString("");
					URI uri = URI.create(
						"jar:file:////folder/example.zip!/zipfolder/" + name);
					return createResourceResponse(
						FileSystemResourceReference.getPath(uri));
				}
				catch (IOException | URISyntaxException e)
				{
					throw new WicketRuntimeException("Error while reading the file.", e);
				}
			};
		};
	}
});
----

FileSystemResourceReference.getPath(uri) uses a FileSystemPathService to setup a path the resource reference can work on. 

So if you write a custom file system you can easily handle every path by adding a *org.apache.wicket.resource.FileSystemPathService* text file into *META-INF/services* and put in your implementation.

A reference implementation can be found in the java class org.apache.wicket.resource.FileSystemJarPathService.

Further FileSystemProviders and the corresponding FileSystems can be implemented as described here:

http://docs.oracle.com/javase/7/docs/technotes/guides/io/fsp/filesystemprovider.html[http://docs.oracle.com/javase/7/docs/technotes/guides/io/fsp/filesystemprovider.html]

