Spec-Zone .ru
спецификации, руководства, описания, API
След: Существенные Классы
Урок: Основной ввод-вывод
Раздел: Файловый ввод-вывод (Обладающий NIO.2)
Операции файла
Домашняя страница > Существенные Классы > Основной ввод-вывод

Операции файла

Files class является другим основным entrypoint java.nio.file пакет. Этот class предлагает богатый набор статических методов для того, чтобы считать, писать, и управлять файлами и каталогами. Files методы работают над экземплярами Path объекты. Прежде, чем продолжить к остающимся разделам, следует ознакомить себя со следующими общими понятиями:

Выпуск Системных ресурсов

Многие из ресурсов, которые используются в этом API, таком как потоки или каналы, реализуют или расширяются java.io.Closeable интерфейс. Требование a Closeable ресурс то, что close метод должен быть вызван, чтобы выпустить ресурс когда больше не требующийся. У пренебрежения закрыть ресурс может быть отрицательная импликация на производительности приложения. try-оператор с ресурсами, описанный в следующем разделе, обрабатывает этот шаг для Вас.

Ловля Исключений

С файловым вводом-выводом неожиданные условия являются фактом жизни: файл существует (или не существует), когда ожидающийся, у программы нет доступа к файловой системе, реализация файловой системы значения по умолчанию не поддерживает определенную функцию и так далее. Можно встретиться с многочисленными ошибками.

Все методы, которые получают доступ к файловой системе, могут бросить IOException. Это - передовая практика, чтобы поймать эти исключения, встраивая эти методы в a try-оператор с ресурсами, представленный в Java SE 7 выпусков. try-у оператора с ресурсами есть преимущество, что компилятор автоматически генерирует код, чтобы закрыть ресурс (ы) когда больше не требующийся. Следующий код показывает, как это могло бы смотреть:

Charset charset = Charset.forName("US-ASCII");
String s = ...;
try (BufferedWriter writer = Files.newBufferedWriter(file, charset)) {
    writer.write(s, 0, s.length());
} catch (IOException x) {
    System.err.format("IOException: %s%n", x);
}

Для получения дополнительной информации см. Оператор попытки с ресурсами.

Альтернативно, можно встроить методы файлового ввода-вывода в a try блок и затем ловит любые исключения в a catch блок. Если Ваш код открыл какие-либо потоки или каналы, следует закрыть их в a finally блок. Предыдущий пример смотрел бы что-то как следующее использование подхода "выгода попытки наконец":

Charset charset = Charset.forName("US-ASCII");
String s = ...;
BufferedWriter writer = null;
try {
    writer = Files.newBufferedWriter(file, charset);
    writer.write(s, 0, s.length());
} catch (IOException x) {
    System.err.format("IOException: %s%n", x);
} finally {
    if (writer != null) writer.close();
}

Для получения дополнительной информации см. Ловлю и Обработку Исключений.

В дополнение к IOException, много определенных исключений расширяются FileSystemException. У этого class есть некоторые полезные методы, которые возвращают включенный файл (getFile), подробная строка сообщения (getMessage), причина, почему отказавшая работа файловой системы (getReason), и "другой" включенный файл, если любой (getOtherFile).

Следующий фрагмент кода показывает как getFile метод мог бы использоваться:

try (...) {
    ...    
} catch (NoSuchFileException x) {
    System.err.format("%s does not exist\n", x.getFile());
}

В целях ясности примеры файлового ввода-вывода в этом уроке, возможно, не показывают обработку исключений, но Ваш код должен всегда включать это.

Varargs

Несколько Files методы принимают произвольное число параметров, когда флаги определяются. Например, в следующей сигнатуре метода, нотации эллипсов после CopyOption параметр указывает, что метод принимает переменное число параметров, или varargs, как их обычно вызывают:

Path Files.move(Path, Path, CopyOption...)

Когда метод принимает varargs параметр, можно передать его список разделенных запятой значений значений или массива (CopyOption[]) из значений.

В move пример, метод может быть вызван следующим образом:

import static java.nio.file.StandardCopyOption.*;

Path source = ...;
Path target = ...;
Files.move(source,
           target,
           REPLACE_EXISTING,
           ATOMIC_MOVE);

Для получения дополнительной информации о varargs синтаксисе, см. Произвольное число Параметров.

Атомарные Операции

Несколько Files методы, такой как move, может выполнить определенные операции атомарно в некоторых файловых системах.

Атомарная работа файла является работой, которая не может быть прервана или "частично" выполнена. Или вся работа выполняется или сбои работы. Это важно, когда у Вас будут многократные процессы, работающие на той же самой области файловой системы, и Вы должны гарантировать, что каждый процесс получает доступ к полному файлу.

Объединение в цепочку метода

Многие из методов файлового ввода-вывода поддерживают понятие объединения в цепочку метода.

Вы сначала вызываете метод, который возвращает объект. Вы тогда сразу вызываете метод на тот объект, который возвращает еще один объект и так далее. Многие из примеров ввода-вывода используют следующий метод:

String value = Charset.defaultCharset().decode(buf).toString();
UserPrincipal group =
    file.getFileSystem().getUserPrincipalLookupService().
         lookupPrincipalByName("me");

Этот метод производит компактный код и позволяет Вам избежать объявлять временные переменные, в которых Вы не нуждаетесь.

Каков Шарик?

Два метода в Files class принимает параметр шарика, но каков шарик?

Можно использовать синтаксис шарика, чтобы определить поведение сопоставления с образцом.

Образец шарика определяется как строка и соответствующий против других строк, таких как имена каталогов или имена файлов. Синтаксис шарика следует за несколькими простыми правилами:

Вот некоторые примеры синтаксиса шарика:


Отметьте: Если Вы вводите образец шарика в клавиатуре, и это содержит один из специальных символов, следует поместить образец в кавычки ("*"), используйте наклонную черту влево (\*), или использование безотносительно механизма escape поддерживается в командной строке.

Синтаксис шарика мощен и удобен. Однако, если это не достаточно для Ваших потребностей, можно также использовать регулярное выражение. Для получения дополнительной информации см. урок Регулярных выражений.

Для получения дополнительной информации о шарике sytnax, см. спецификацию API для getPathMatcher метод в FileSystem class.

Понимание ссылки

Files class является "знающей ссылкой." Каждый Files метод или обнаруживает, что сделать, когда с символьной ссылкой встречаются, или это предоставляет возможность, позволяющую Вам сконфигурировать поведение, когда с символьной ссылкой встречаются.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Операции Пути
Следующая страница: Проверка Файла или каталога