Next: Files, Previous: Named output formats, Up: Input-Output [Contents][Index]
A Path is the name of a file or some other resource.
The path mechanism provides a layer of abstraction, so you can
use the same functions on either a filename or a URL/URI.
Functions that in standard Scheme take a filename
have been generalized to take a path or a path string,
as if using the path
function below. For example:
(open-input-file "http://www.gnu.org/index.html") (open-input-file (URI "ftp://ftp.gnu.org/README"))
A general path, which can be a filename
or a URI
.
It can be either a filename
or a URI
.
Represented using the abstract Java class gnu.kawa.io.Path
.
Coercing a value to a Path
is equivalent to
calling the path
constructor documented below.
Coerces the arg to a path
.
If arg is already a path
, it is returned unchanged.
If arg is a java.net.URI
, or a java.net.URL
then a URI
value is returned.
If arg is a java.io.File
, a filepath
value is returned.
Otherwise, arg can be a string.
A URI
value is returned if the string starts with a URI scheme
(such as "http:"
),
and a filepath
value is returned otherwise.
True if arg is a path
- i.e. an instance of a gnu.kawa.io.Path
.
With no arguments, returns the default directory of the current thread
as a path
.
This is used as the base directory for relative pathnames.
The initial value is that of the user.dir
property
as returned by (java.lang.System:getProperty "user.dir")
.
If a new-value argument is given, sets the default directory:
(current-path "/opt/myApp/")
A string value is automatically converted to a path
,
normally a filepath
.
Alternatively, you can change the default using a setter:
(set! (current-path) "/opt/myApp/")
Since current-path
is a parameter object, you can
locally change the value using parameterize
.
The name of a local file.
Represented using the Java class gnu.kawa.io.FilePath
,
which is a wrapper around java.io.File
.
True if arg is a filepath
- i.e. an instance of
a gnu.kawa.io.FilePath
.
A Uniform Resource Indicator, which is a generalization of
the more familiar URL. The general format is specified by
RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax.
Represented using the Java class gnu.kawa.io.URIPath
,
which is a wrapper around java.net.URI
.
A URI can be a URL, or it be a relative URI.
True if arg is a URI
- i.e. an instance of
a gnu.kawa.io.URIPath
.
A Uniform Resource Locator - a subtype of URI
.
Represented using the Java class gnu.kawa.io.URLPath
,
which is a wrapper around a java.net.URL
, in
addition to extending gnu.kawa.io.URIPath
.
Returns the “URI scheme” of arg (coerced to a path
) if it is
defined, or #f
otherwise. The URI scheme of a filepath
is "file"
if the filepath
is absolute, and #f
otherwise.
(path-scheme "http://gnu.org/") ⇒ "http"
Returns the authority part of arg (coerced to a path
) if it is
defined, or #f
otherwise.
The “authority” is usually the hostname, but may also include user-info
or a port-number.
(path-authority "http://me@localhost:8000/home") ⇒ "me@localhost:8000"
Returns the name name part of arg (coerced to a path
) if it is
defined, or #f
otherwise.
(path-host "http://me@localhost:8000/home") ⇒ "localhost"
Returns the “user info” of arg (coerced to a path
) if it is
specified, or #f
otherwise.
(path-host "http://me@localhost:8000/home") ⇒ "me"
Returns the port number of arg (coerced to a path
) if it is
specified, or -1
otherwise. Even if there is a default port
associated with a URI scheme (such as 80 for http
), the value
-1 is returned unless the port number is explictly specified.
(path-host "http://me@localhost:8000/home") ⇒ 8000 (path-host "http://me@localhost/home") ⇒ -1
Returns the “path component” of the arg
(coerced to a path
).
(The name path-path
might be more logical,
but it is obviously a bit awkward.)
The path component of a file name is the file name itself.
For a URI, it is the main hierarchical part of the URI,
without schema, authority, query, or fragment.
(path-file "http://gnu.org/home/me.html?add-bug#body") ⇒ "/home/me.html"
If arg (coerced to a path
) is directory,
return arg; otherwise return the “parent” path, without the
final component.
(path-directory "http://gnu.org/home/me/index.html#body") ⇒ (path "http://gnu.org/home/me/") (path-directory "http://gnu.org/home/me/") ⇒ (path "http://gnu.org/home/me/")
(path-directory "./dir")
⇒
(path "./dir")
if dir
is a directory, and (path ".")
otherwise.
Returns the “parent directory” of arg (coerced to a path
).
If arg is not a directory, same as path-directory arg
.
(path-parent "a/b/c") ⇒ (path "a/b") (path-parent "file:/a/b/c") ⇒ (path "file:/a/b/c") (path-parent "file:/a/b/c/") ⇒ (path "file:/a/b/")
The last component of path component
of arg (coerced to a path
).
Returns a substring of (path-file arg)
.
If that string ends with ‘/’ or the path separator,
that last character is ignored.
Returns the tail of the path-string, following
the last (non-final) ‘/’ or path separator.
(path-last "http:/a/b/c") ⇒ "c" (path-last "http:/a/b/c/") ⇒ "c" (path-last "a/b/c") ⇒ "c"
Returns the “extension” of the arg
(coerced to a path
).
(path-extension "http://gnu.org/home/me.html?add-bug#body") ⇒ "html" (path-extension "/home/.init") ⇒ #f
Returns the query part of arg (coerced to a path
) if it is
defined, or #f
otherwise. The query part of a URI is the
part after ‘?’.
(path-query "http://gnu.org/home?add-bug") ⇒ "add-bug"
Returns the fragment part of arg (coerced to a path
) if it is
defined, or #f
otherwise. The fragment of a URI is the
part of after ‘#’.
(path-query "http://gnu.org/home#top") ⇒ "top"
Returns a uri unchanged if it is an absolute URI. Otherwise resolves it against a base URI base, which is normally (though not always) absolute.
This uses the algorithm specifyed by RFC-3986 (assuming base
is absolute), unlike the obsolete RFC-2396 algorithm used
by java.net.URI.resolve
.
Next: Files, Previous: Named output formats, Up: Input-Output [Contents][Index]