|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Files class является другим основным entrypoint java.nio.file пакет. Этот class предлагает богатый набор статических методов для того, чтобы считать, писать, и управлять файлами и каталогами. Files методы работают над экземплярами Path объекты. Прежде, чем продолжить к остающимся разделам, следует ознакомить себя со следующими общими понятиями:
Многие из ресурсов, которые используются в этом API, таком как потоки или каналы, реализуют или расширяются интерфейс. Требование 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 метод мог бы использоваться:
try (...) {
...
} catch (NoSuchFileException x) {
System.err.format("%s does not exist\n", x.getFile());
}
В целях ясности примеры файлового ввода-вывода в этом уроке, возможно, не показывают обработку исключений, но Ваш код должен всегда включать это.
Несколько 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 принимает параметр шарика, но каков шарик?
Можно использовать синтаксис шарика, чтобы определить поведение сопоставления с образцом.
Образец шарика определяется как строка и соответствующий против других строк, таких как имена каталогов или имена файлов. Синтаксис шарика следует за несколькими простыми правилами:
*, соответствия любое число символов (включая ни один).**, работы как * но перекрестные границы каталога. Этот синтаксис обычно используется для того, чтобы соответствовать полные пути.?, соответствия точно один символ.{sun,moon,stars} соответствия "солнце", "луна", или "звезды".{temp*,tmp*} соответствия все строки, начинающиеся "с временного файла" или "tmp".-) используется, диапазон символов. Например: [aeiou] соответствия любой строчный гласный.[0-9] соответствия любая цифра.[A-Z] соответствия любая прописная буква.[a-z,A-Z] соответствия любая прописная или строчная буква.*, ?, и \ соответствуйте себя.*, ?, или другие специальные символы, можно выйти из них при использовании символа наклонной черты влево, \. Например: \\ соответствует единственную наклонную черту влево, и \? соответствует вопросительный знак.Вот некоторые примеры синтаксиса шарика:
*.html – Соответствия все строки тот конец в.html??? – Соответствия все строки точно с тремя буквами или цифрами*[0-9]* – Соответствия все строки, содержащие числовое значение*.{htm,html,pdf} – Соответствия любая строка, заканчивающаяся.htm.html или.pdfa?*.java – Соответствия любая начинающаяся строка a, сопровождаемый по крайней мере одной буквой или цифрой, и заканчивающийся.java{foo*,*[0-9]*} – Соответствия любая строка, начинающаяся foo или любая строка, содержащая числовое значение"*"), используйте наклонную черту влево (\*), или использование безотносительно механизма escape поддерживается в командной строке. Синтаксис шарика мощен и удобен. Однако, если это не достаточно для Ваших потребностей, можно также использовать регулярное выражение. Для получения дополнительной информации см. урок Регулярных выражений.
Для получения дополнительной информации о шарике sytnax, см. спецификацию API для getPathMatcher метод в FileSystem class.
Files class является "знающей ссылкой." Каждый Files метод или обнаруживает, что сделать, когда с символьной ссылкой встречаются, или это предоставляет возможность, позволяющую Вам сконфигурировать поведение, когда с символьной ссылкой встречаются.