
 
                An abstract representation of file and directory pathnames.
 
 User interfaces and operating systems use system-dependent pathname
 strings to name files and directories.  This class presents an
 abstract, system-independent view of hierarchical pathnames.  An
 abstract pathname has two components:
 
 -  An optional system-dependent prefix string,
      such as a disk-drive specifier, 
"/" for the UNIX root
      directory, or "\\\\" for a Microsoft Windows UNC pathname, and
  -  A sequence of zero or more string names.
 
 
 The first name in an abstract pathname may be a directory name or, in the
 case of Microsoft Windows UNC pathnames, a hostname.  Each subsequent name
 in an abstract pathname denotes a directory; the last name may denote
 either a directory or a file.  The 
empty abstract pathname has no
 prefix and an empty name sequence.
 
 The conversion of a pathname string to or from an abstract pathname is
 inherently system-dependent.  When an abstract pathname is converted into a
 pathname string, each name is separated from the next by a single copy of
 the default separator character.  The default name-separator
 character is defined by the system property file.separator, and
 is made available in the public static fields File.separator and File.separatorChar of this class.
 When a pathname string is converted into an abstract pathname, the names
 within it may be separated by the default name-separator character or by any
 other name-separator character that is supported by the underlying system.
 
 A pathname, whether abstract or in string form, may be either
 absolute or relative.  An absolute pathname is complete in
 that no other information is required in order to locate the file that it
 denotes.  A relative pathname, in contrast, must be interpreted in terms of
 information taken from some other pathname.  By default the classes in the
 java.io package always resolve relative pathnames against the
 current user directory.  This directory is named by the system property
 user.dir, and is typically the directory in which the Java
 virtual machine was invoked.
 
 The parent of an abstract pathname may be obtained by invoking
 the File.getParent() method of this class and consists of the pathname's
 prefix and each name in the pathname's name sequence except for the last.
 Each directory's absolute pathname is an ancestor of any File
 object with an absolute abstract pathname which begins with the directory's
 absolute pathname.  For example, the directory denoted by the abstract
 pathname "/usr" is an ancestor of the directory denoted by the
 pathname "/usr/local/bin".
 
 The prefix concept is used to handle root directories on UNIX platforms,
 and drive specifiers, root directories and UNC pathnames on Microsoft Windows platforms,
 as follows:
 
 -  For UNIX platforms, the prefix of an absolute pathname is always
 
"/".  Relative pathnames have no prefix.  The abstract pathname
 denoting the root directory has the prefix "/" and an empty
 name sequence.
  -  For Microsoft Windows platforms, the prefix of a pathname that contains a drive
 specifier consists of the drive letter followed by 
":" and
 possibly followed by "\\" if the pathname is absolute.  The
 prefix of a UNC pathname is "\\\\"; the hostname and the share
 name are the first two names in the name sequence.  A relative pathname that
 does not specify a drive has no prefix.
  
  Instances of this class may or may not denote an actual file-system
 object such as a file or a directory.  If it does denote such an object
 then that object resides in a partition.  A partition is an
 operating system-specific portion of storage for a file system.  A single
 storage device (e.g. a physical disk-drive, flash memory, CD-ROM) may
 contain multiple partitions.  The object, if any, will reside on the
 partition named by some ancestor of the absolute
 form of this pathname.
 
 A file system may implement restrictions to certain operations on the
 actual file-system object, such as reading, writing, and executing.  These
 restrictions are collectively known as access permissions.  The file
 system may have multiple sets of access permissions on a single object.
 For example, one set may apply to the object's owner, and another
 may apply to all other users.  The access permissions on an object may
 cause some methods in this class to fail.
 
 Instances of the File class are immutable; that is, once
 created, the abstract pathname represented by a File object
 will never change.