blob: f5b809a608902aecbba7a10d30d9ac442c7ded65 [file] [log] [blame]
<document>
<properties>
<title>Supported File Systems</title>
<author email="adammurdoch@apache.org">Adam Murdoch</author>
<author email="imario@apache.org">Mario Ivankovits</author>
</properties>
<body>
<section name="Supported File Systems">
<p>Commons VFS currently supports the following file systems:</p>
<ul>
<li>
<a href="#FTP">FTP</a>
</li>
<li>
<a href="#Local Files">Local Files</a>
</li>
<li>
<a href="#HTTP and HTTPS">HTTP and HTTPS</a>
</li>
<li>
<a href="#SFTP">SFTP</a>
</li>
<li>
<a href="#Temporary Files">Temporary Files</a>
</li>
<li>
<a href="#Zip, Jar and Tar">Zip, Jar and Tar (uncompressed, tgz or tbz2)</a>
</li>
<li>
<a href="#gzip and bzip2">gzip and bzip2</a>
</li>
<li>
<a href="#res">res</a>
</li>
<li>
<a href="#ram">ram</a>
</li>
</ul>
</section>
<section name="Things from the sandbox">
<p>The following file systems are in development:</p>
<ul>
<li>
<a href="#WebDAV">WebDAV</a><br />
We can't release WebDAV as we depend on an snapshot, thus it is in our sandbox.
</li>
<li>
<a href="#CIFS">CIFS</a>
</li>
<li>
<a href="#mime">mime</a>
</li>
</ul>
</section>
<section name="Naming">
<p>All filenames are treated as URIs. One of the consequences of this is you have to encode the '%'
character using <code>%25</code>. <br />
Depending on the filesystem additional characters are encoded if needet. This is done automatically, but
might be reflected in the filename.
</p>
<p>
<b>Examples</b>
</p>
<ul>
<li>
<code>file:///somedir/some%25file.txt</code>
</li>
</ul>
</section>
<section name="Local Files">
<p>Provides access to the files on the local physical file system.</p>
<p>
<b>URI Format</b>
</p>
<p>
<code>[file://]
<i>absolute-path</i>
</code>
</p>
<p>
Where
<code>
<i>absolute-path</i>
</code> is a valid absolute
file name for the local platform. UNC names are supported
under Windows.
</p>
<p>
<b>Examples</b>
</p>
<ul>
<li>
<code>file:///home/someuser/somedir</code>
</li>
<li>
<code>file://C:/Documents and Settings</code>
</li>
<li>
<code>file:////somehost/someshare/afile.txt</code>
</li>
<li>
<code>/home/someuser/somedir</code>
</li>
<li>
<code>c:\program files\some dir</code>
</li>
<li>
<code>c:/program files/some dir</code>
</li>
</ul>
</section>
<section name="Zip, Jar and Tar">
<p>Provides read-only access to the contents of Zip, Jar and Tar files.</p>
<p>
<b>URI Format</b>
</p>
<p>
<code>zip://
<i>arch-file-uri</i>[!
<i>absolute-path</i>]
</code>
</p>
<p>
<code>jar://
<i>arch-file-uri</i>[!
<i>absolute-path</i>]
</code>
</p>
<p>
<code>tar://
<i>arch-file-uri</i>[!
<i>absolute-path</i>]
</code>
</p>
<p>
<code>tgz://
<i>arch-file-uri</i>[!
<i>absolute-path</i>]
</code>
</p>
<p>
<code>tbz2://
<i>arch-file-uri</i>[!
<i>absolute-path</i>]
</code>
</p>
<p>
Where
<code>arch-file-uri</code> refers to a file of any
supported type, including other zip files. Note: if you would like
to use the ! as normal character it must be escaped
using <code>%21</code>.<br />
<code>tgz</code> and <code>tbz2</code> are convenience for <code>tar:gz</code> and <code>tar:bz2</code>.
</p>
<p>
<b>Examples</b>
</p>
<ul>
<li>
<code>jar:../lib/classes.jar!/META-INF/manifest.mf</code>
</li>
<li>
<code>zip:http://somehost/downloads/somefile.zip</code>
</li>
<li>
<code>jar:zip:outer.zip!/nested.jar!/somedir</code>
</li>
<li>
<code>jar:zip:outer.zip!/nested.jar!/some%21dir</code>
</li>
<li>
<code>tar:gz:http://anyhost/dir/mytar.tar.gz!/mytar.tar!/path/in/tar/README.txt</code>
</li>
<li>
<code>tgz:file://anyhost/dir/mytar.tgz!/somepath/somefile</code>
</li>
</ul>
</section>
<section name="gzip and bzip2">
<p>Provides read-only access to the contents of gzip and bzip2 files.</p>
<p>
<b>URI Format</b>
</p>
<p>
<code>gz://
<i>compressed-file-uri</i>
</code>
</p>
<p>
<code>bz2://
<i>compressed-file-uri</i>
</code>
</p>
<p>
Where
<code>compressed-file-uri</code> refers to a file of any
supported type. There is no need to add a ! part to the uri if
you read the content of the file you always will get the uncompressed
version.
</p>
<p>
<b>Examples</b>
</p>
<ul>
<li>
<code>gz:/my/gz/file.gz</code>
</li>
</ul>
</section>
<section name="HTTP and HTTPS">
<p>Provides access to files on an HTTP server.</p>
<p>
<b>URI Format</b>
</p>
<p>
<code>http://[
<i>username</i>[:
<i>password</i>]@]
<i>hostname</i>[:
<i>port</i>][
<i>absolute-path</i>]
</code>
</p>
<p>
<code>https://[
<i>username</i>[:
<i>password</i>]@]
<i>hostname</i>[:
<i>port</i>][
<i>absolute-path</i>]
</code>
</p>
<p>
<b>Examples</b>
</p>
<ul>
<li>
<code>http://somehost:8080/downloads/somefile.jar</code>
</li>
<li>
<code>http://myusername@somehost/index.html</code>
</li>
</ul>
</section>
<section name="WebDAV">
<p>Provides access to files on a WebDAV server.</p>
<p>
<b>URI Format</b>
</p>
<p>
<code>webdav://[
<i>username</i>[:
<i>password</i>]@]
<i>hostname</i>[:
<i>port</i>][
<i>absolute-path</i>]
</code>
</p>
<p>
<b>Examples</b>
</p>
<ul>
<li>
<code>webdav://somehost:8080/dist</code>
</li>
</ul>
</section>
<section name="FTP">
<p>Provides access to the files on an FTP server.</p>
<p>
<b>URI Format</b>
</p>
<p>
<code>ftp://[
<i>username</i>[:
<i>password</i>]@]
<i>hostname</i>[:
<i>port</i>][
<i>absolute-path</i>]
</code>
</p>
<p>
<b>Examples</b>
</p>
<ul>
<li>
<code>ftp://myusername:mypassword@somehost/pub/downloads/somefile.tgz</code>
</li>
</ul>
</section>
<section name="SFTP">
<p>
Provides access to the files on an SFTP server (that is, an SSH
or SCP server).
</p>
<p>
<b>URI Format</b>
</p>
<p>
<code>sftp://[
<i>username</i>[:
<i>password</i>]@]
<i>hostname</i>[:
<i>port</i>][
<i>absolute-path</i>]
</code>
</p>
<p>
<b>Examples</b>
</p>
<ul>
<li>
<code>sftp://myusername:mypassword@somehost/pub/downloads/somefile.tgz</code>
</li>
</ul>
</section>
<section name="CIFS">
<p>
Provides access to the files on a CIFS server, such as
a Samba server, or a Windows share.
</p>
<p>
<b>URI Format</b>
</p>
<p>
<code>smb://[
<i>username</i>[:
<i>password</i>]@]
<i>hostname</i>[:
<i>port</i>][
<i>absolute-path</i>]
</code>
</p>
<p>
<b>Examples</b>
</p>
<ul>
<li>
<code>smb://somehost/home</code>
</li>
</ul>
</section>
<section name="Temporary Files">
<p>
Provides access to a temporary file system, or scratchpad,
that is deleted when Commons VFS shuts down. The temporary file
system is backed by a local file system.
</p>
<p>
<b>URI Format</b>
</p>
<p>
<code>tmp://[
<i>absolute-path</i>]
</code>
</p>
<p>
<b>Examples</b>
</p>
<ul>
<li>
<code>tmp://dir/somefile.txt</code>
</li>
</ul>
</section>
<section name="res">
<p>
This is not really a filesystem, it just tries to lookup a resource using javas <code>ClassLoader.getResource()</code>
and creates a VFS url for further processing.
</p>
<p>
<b>URI Format</b>
</p>
<p>
<code>res://[
<i>path</i>]
</code>
</p>
<p>
<b>Examples</b>
</p>
<ul>
<li>
<code>res:path/in/classpath/image.png</code><br/>
might result in
<code>jar:file://my/path/to/images.jar!/path/in/classpath/image.png</code><br/>
</li>
</ul>
</section>
<section name="ram">
<p>
A filesystem which stores all the data in memory.
You can configure the max size and a predicate (FileSelector). The predicate will be used to check if
it is allowed to add a given file.
</p>
<p>
<b>URI Format</b>
</p>
<p>
<code>ram://[
<i>path</i>]
</code>
</p>
<p>
<b>Examples</b>
</p>
<ul>
<li>
<code>ram:///any/path/to/file.txt</code>
</li>
</ul>
</section>
<section name="mime">
<p>
This filesystem can read mails and its attachements like archives.<br />
If a part in the parsed mail has no name, a dummy name will be generated.
The dummy name is: _body_part_X where X will be replaced by the part number.
</p>
<p>
<b>URI Format</b>
</p>
<p>
<code>mime://
<i>mime-file-uri</i>[!
<i>absolute-path</i>]
</code>
</p>
<p>
<b>Examples</b>
</p>
<ul>
<li>
<code>mime:file:///your/path/mail/anymail.mime!/</code>
</li>
<li>
<code>mime:file:///your/path/mail/anymail.mime!/filename.pdf</code>
</li>
<li>
<code>mime:file:///your/path/mail/anymail.mime!/_body_part_0</code>
</li>
</ul>
</section>
</body>
</document>