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 aURI
. It can be either afilename
or aURI
. Represented using the abstract Java classgnu.kawa.io.Path
.Coercing a value to a
Path
is equivalent to calling thepath
constructor documented below.
Coerces the
arg
to apath
. Ifarg
is already apath
, it is returned unchanged. Ifarg
is ajava.net.URI
, or ajava.net.URL
then aURI
value is returned. Ifarg
is ajava.io.File
, afilepath
value is returned. Otherwise,arg
can be a string. AURI
value is returned if the string starts with a URI scheme (such as"http:"
), and afilepath
value is returned otherwise.
True if
arg
is apath
- i.e. an instance of agnu.kawa.io.Path
.
Procedure: current-path
[new-value
]
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 theuser.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 afilepath
.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 usingparameterize
.
The name of a local file. Represented using the Java class
gnu.kawa.io.FilePath
, which is a wrapper aroundjava.io.File
.
True if
arg
is afilepath
- i.e. an instance of agnu.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 aroundjava.net.URI
. A URI can be a URL, or it be a relative URI.
True if
arg
is aURI
- i.e. an instance of agnu.kawa.io.URIPath
.
A Uniform Resource Locator - a subtype of
URI
. Represented using the Java classgnu.kawa.io.URLPath
, which is a wrapper around ajava.net.URL
, in addition to extendinggnu.kawa.io.URIPath
.
Returns the “URI scheme” of
arg
(coerced to apath
) if it is defined, or#f
otherwise. The URI scheme of afilepath
is"file"
if thefilepath
is absolute, and#f
otherwise.(path-scheme "http://gnu.org/") ⇒ "http"
Returns the authority part of
arg
(coerced to apath
) 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 apath
) if it is defined, or#f
otherwise.(path-host "http://me@localhost:8000/home") ⇒ "localhost"
Returns the “user info” of
arg
(coerced to apath
) if it is specified, or#f
otherwise.(path-host "http://me@localhost:8000/home") ⇒ "me"
Returns the port number of
arg
(coerced to apath
) if it is specified, or-1
otherwise. Even if there is a default port associated with a URI scheme (such as 80 forhttp
), 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 apath
). (The namepath-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 apath
) is directory, returnarg
; 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")
ifdir
is a directory, and(path ".")
otherwise.
Returns the “parent directory” of
arg
(coerced to apath
). Ifarg
is not a directory, same aspath-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 apath
). Returns a substring of(path-file
. If that string ends with ‘arg
)/
’ 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 apath
).(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 apath
) 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 apath
) 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"
Procedure: resolve-uri
uri
base
Returns a
uri
unchanged if it is an absolute URI. Otherwise resolves it against a base URIbase
, 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 byjava.net.URI.resolve
.