| Index: tool/input_sdk/lib/io/directory.dart
|
| diff --git a/tool/input_sdk/lib/io/directory.dart b/tool/input_sdk/lib/io/directory.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e890fcff42947c940fe03f969e4192400ea67388
|
| --- /dev/null
|
| +++ b/tool/input_sdk/lib/io/directory.dart
|
| @@ -0,0 +1,313 @@
|
| +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +part of dart.io;
|
| +
|
| +/**
|
| + * A reference to a directory (or _folder_) on the file system.
|
| + *
|
| + * A Directory instance is an object holding a [path] on which operations can
|
| + * be performed. The path to the directory can be [absolute] or [relative].
|
| + * You can get the parent directory using the getter [parent],
|
| + * a property inherited from [FileSystemEntity].
|
| + *
|
| + * In addition to being used as an instance to access the file system,
|
| + * Directory has a number of static properties, such as [systemTemp],
|
| + * which gets the system's temporary directory, and the getter and setter
|
| + * [current], which you can use to access or change the current directory.
|
| + *
|
| + * Create a new Directory object with a pathname to access the specified
|
| + * directory on the file system from your program.
|
| + *
|
| + * var myDir = new Directory('myDir');
|
| + *
|
| + * Most methods in this class occur in synchronous and asynchronous pairs,
|
| + * for example, [create] and [createSync].
|
| + * Unless you have a specific reason for using the synchronous version
|
| + * of a method, prefer the asynchronous version to avoid blocking your program.
|
| + *
|
| + * ## Create a directory
|
| + *
|
| + * The following code sample creates a directory using the [create] method.
|
| + * By setting the `recursive` parameter to true, you can create the
|
| + * named directory and all its necessary parent directories,
|
| + * if they do not already exist.
|
| + *
|
| + * import 'dart:io';
|
| + *
|
| + * void main() {
|
| + * // Creates dir/ and dir/subdir/.
|
| + * new Directory('dir/subdir').create(recursive: true)
|
| + * // The created directory is returned as a Future.
|
| + * .then((Directory directory) {
|
| + * print(directory.path);
|
| + * });
|
| + * }
|
| + *
|
| + * ## List a directory
|
| + *
|
| + * Use the [list] or [listSync] methods to get the files and directories
|
| + * contained by a directory.
|
| + * Set `recursive` to true to recursively list all subdirectories.
|
| + * Set `followLinks` to true to follow symbolic links.
|
| + * The list method returns a [Stream] that provides FileSystemEntity
|
| + * objects. Use the listen callback function to process each object
|
| + * as it become available.
|
| + *
|
| + * import 'dart:io';
|
| + *
|
| + * void main() {
|
| + * // Get the system temp directory.
|
| + * var systemTempDir = Directory.systemTemp;
|
| + *
|
| + * // List directory contents, recursing into sub-directories,
|
| + * // but not following symbolic links.
|
| + * systemTempDir.list(recursive: true, followLinks: false)
|
| + * .listen((FileSystemEntity entity) {
|
| + * print(entity.path);
|
| + * });
|
| + * }
|
| + *
|
| + * ## The use of Futures
|
| + *
|
| + * I/O operations can block a program for some period of time while it waits for
|
| + * the operation to complete. To avoid this, all
|
| + * methods involving I/O have an asynchronous variant which returns a [Future].
|
| + * This future completes when the I/O operation finishes. While the I/O
|
| + * operation is in progress, the Dart program is not blocked,
|
| + * and can perform other operations.
|
| + *
|
| + * For example,
|
| + * the [exists] method, which determines whether the directory exists,
|
| + * returns a boolean value using a Future.
|
| + * Use `then` to register a callback function, which is called when
|
| + * the value is ready.
|
| + *
|
| + * import 'dart:io';
|
| + *
|
| + * main() {
|
| + * final myDir = new Directory('dir');
|
| + * myDir.exists().then((isThere) {
|
| + * isThere ? print('exists') : print('non-existent');
|
| + * });
|
| + * }
|
| + *
|
| + *
|
| + * In addition to exists, the [stat], [rename], and
|
| + * other methods, return Futures.
|
| + *
|
| + * ## Other resources
|
| + *
|
| + * * [Dart by Example](https://www.dartlang.org/dart-by-example/#files-directories-and-symlinks)
|
| + * provides additional task-oriented code samples that show how to use
|
| + * various API from the Directory class and the related [File] class.
|
| + *
|
| + * * [I/O for Command-Line
|
| + * Apps](https://www.dartlang.org/docs/dart-up-and-running/ch03.html#dartio---io-for-command-line-apps)
|
| + * a section from _A Tour of the Dart Libraries_ covers files and directories.
|
| + *
|
| + * * [Write Command-Line Apps](https://www.dartlang.org/docs/tutorials/cmdline/),
|
| + * a tutorial about writing command-line apps, includes information about
|
| + * files and directories.
|
| + */
|
| +abstract class Directory implements FileSystemEntity {
|
| + /**
|
| + * Gets the path of this directory.
|
| + */
|
| + final String path;
|
| +
|
| + /**
|
| + * Creates a [Directory] object.
|
| + *
|
| + * If [path] is a relative path, it will be interpreted relative to the
|
| + * current working directory (see [Directory.current]), when used.
|
| + *
|
| + * If [path] is an absolute path, it will be immune to changes to the
|
| + * current working directory.
|
| + */
|
| + factory Directory(String path) => new _Directory(path);
|
| +
|
| + /**
|
| + * Create a Directory object from a URI.
|
| + *
|
| + * If [uri] cannot reference a directory this throws [UnsupportedError].
|
| + */
|
| + factory Directory.fromUri(Uri uri) => new Directory(uri.toFilePath());
|
| +
|
| + /**
|
| + * Creates a directory object pointing to the current working
|
| + * directory.
|
| + */
|
| + static Directory get current => _Directory.current;
|
| +
|
| + /**
|
| + * Returns a [Uri] representing the directory's location.
|
| + *
|
| + * The returned URI's scheme is always "file" if the entity's [path] is
|
| + * absolute, otherwise the scheme will be empty.
|
| + * The returned URI's path always ends in a slash ('/').
|
| + */
|
| + Uri get uri;
|
| +
|
| + /**
|
| + * Sets the current working directory of the Dart process including
|
| + * all running isolates. The new value set can be either a [Directory]
|
| + * or a [String].
|
| + *
|
| + * The new value is passed to the OS's system call unchanged, so a
|
| + * relative path passed as the new working directory will be
|
| + * resolved by the OS.
|
| + *
|
| + * Note that setting the current working directory is a synchronous
|
| + * operation and that it changes the working directory of *all*
|
| + * isolates.
|
| + *
|
| + * Use this with care - especially when working with asynchronous
|
| + * operations and multiple isolates. Changing the working directory,
|
| + * while asynchronous operations are pending or when other isolates
|
| + * are working with the file system, can lead to unexpected results.
|
| + */
|
| + static void set current(path) {
|
| + _Directory.current = path;
|
| + }
|
| +
|
| + /**
|
| + * Creates the directory with this name.
|
| + *
|
| + * If [recursive] is false, only the last directory in the path is
|
| + * created. If [recursive] is true, all non-existing path components
|
| + * are created. If the directory already exists nothing is done.
|
| + *
|
| + * Returns a [:Future<Directory>:] that completes with this
|
| + * directory once it has been created. If the directory cannot be
|
| + * created the future completes with an exception.
|
| + */
|
| + Future<Directory> create({bool recursive: false});
|
| +
|
| + /**
|
| + * Synchronously creates the directory with this name.
|
| + *
|
| + * If [recursive] is false, only the last directory in the path is
|
| + * created. If [recursive] is true, all non-existing path components
|
| + * are created. If the directory already exists nothing is done.
|
| + *
|
| + * If the directory cannot be created an exception is thrown.
|
| + */
|
| + void createSync({bool recursive: false});
|
| +
|
| + /**
|
| + * Gets the system temp directory.
|
| + *
|
| + * Gets the directory provided by the operating system for creating
|
| + * temporary files and directories in.
|
| + * The location of the system temp directory is platform-dependent,
|
| + * and may be set by an environment variable.
|
| + */
|
| + static Directory get systemTemp => _Directory.systemTemp;
|
| +
|
| + /**
|
| + * Creates a temporary directory in this directory. Additional random
|
| + * characters are appended to [prefix] to produce a unique directory
|
| + * name. If [prefix] is missing or null, the empty string is used
|
| + * for [prefix].
|
| + *
|
| + * Returns a [:Future<Directory>:] that completes with the newly
|
| + * created temporary directory.
|
| + */
|
| + Future<Directory> createTemp([String prefix]);
|
| +
|
| + /**
|
| + * Synchronously creates a temporary directory in this directory.
|
| + * Additional random characters are appended to [prefix] to produce
|
| + * a unique directory name. If [prefix] is missing or null, the empty
|
| + * string is used for [prefix].
|
| + *
|
| + * Returns the newly created temporary directory.
|
| + */
|
| + Directory createTempSync([String prefix]);
|
| +
|
| + Future<String> resolveSymbolicLinks();
|
| +
|
| + String resolveSymbolicLinksSync();
|
| +
|
| + /**
|
| + * Renames this directory. Returns a [:Future<Directory>:] that completes
|
| + * with a [Directory] instance for the renamed directory.
|
| + *
|
| + * If newPath identifies an existing directory, that directory is
|
| + * replaced. If newPath identifies an existing file, the operation
|
| + * fails and the future completes with an exception.
|
| + */
|
| + Future<Directory> rename(String newPath);
|
| +
|
| + /**
|
| + * Synchronously renames this directory. Returns a [Directory]
|
| + * instance for the renamed directory.
|
| + *
|
| + * If newPath identifies an existing directory, that directory is
|
| + * replaced. If newPath identifies an existing file the operation
|
| + * fails and an exception is thrown.
|
| + */
|
| + Directory renameSync(String newPath);
|
| +
|
| + /**
|
| + * Returns a [Directory] instance whose path is the absolute path to [this].
|
| + *
|
| + * The absolute path is computed by prefixing
|
| + * a relative path with the current working directory, and returning
|
| + * an absolute path unchanged.
|
| + */
|
| + Directory get absolute;
|
| +
|
| + /**
|
| + * Lists the sub-directories and files of this [Directory].
|
| + * Optionally recurses into sub-directories.
|
| + *
|
| + * If [followLinks] is false, then any symbolic links found
|
| + * are reported as [Link] objects, rather than as directories or files,
|
| + * and are not recursed into.
|
| + *
|
| + * If [followLinks] is true, then working links are reported as
|
| + * directories or files, depending on
|
| + * their type, and links to directories are recursed into.
|
| + * Broken links are reported as [Link] objects.
|
| + * If a symbolic link makes a loop in the file system, then a recursive
|
| + * listing will not follow a link twice in the
|
| + * same recursive descent, but will report it as a [Link]
|
| + * the second time it is seen.
|
| + *
|
| + * The result is a stream of [FileSystemEntity] objects
|
| + * for the directories, files, and links.
|
| + */
|
| + Stream<FileSystemEntity> list({bool recursive: false,
|
| + bool followLinks: true});
|
| +
|
| + /**
|
| + * Lists the sub-directories and files of this [Directory].
|
| + * Optionally recurses into sub-directories.
|
| + *
|
| + * If [followLinks] is false, then any symbolic links found
|
| + * are reported as [Link] objects, rather than as directories or files,
|
| + * and are not recursed into.
|
| + *
|
| + * If [followLinks] is true, then working links are reported as
|
| + * directories or files, depending on
|
| + * their type, and links to directories are recursed into.
|
| + * Broken links are reported as [Link] objects.
|
| + * If a link makes a loop in the file system, then a recursive
|
| + * listing will not follow a link twice in the
|
| + * same recursive descent, but will report it as a [Link]
|
| + * the second time it is seen.
|
| + *
|
| + * Returns a [List] containing [FileSystemEntity] objects for the
|
| + * directories, files, and links.
|
| + */
|
| + List<FileSystemEntity> listSync({bool recursive: false,
|
| + bool followLinks: true});
|
| +
|
| + /**
|
| + * Returns a human readable string for this Directory instance.
|
| + */
|
| + String toString();
|
| +}
|
|
|