Главная страница

Java. Полное руководство. 8-е издание. С. Н. Тригуб Перевод с английского и редакция


Скачать 25.04 Mb.
НазваниеС. Н. Тригуб Перевод с английского и редакция
АнкорJava. Полное руководство. 8-е издание.pdf
Дата28.02.2017
Размер25.04 Mb.
Формат файлаpdf
Имя файлаJava. Полное руководство. 8-е издание.pdf
ТипДокументы
#3236
страница53 из 90
1   ...   49   50   51   52   53   54   55   56   ...   90

protected Object[][] getContents() {
Object[][] resources = new Ob j e c t [3][2];
resources[0][0] = "title";
resources[0][1] = "Mein Programm";
resources[1][0] = "StopText";
resources[1][1] = "Anschlag";
resources[2][0] = "StartText";
resources[2][1] = "Anfang";
}
return Следующая программа демонстрирует эти две связки ресурсов, отображая строки, ассоциированные с каждым ключом как для версии по умолчанию (английской, таки для немецкой версии Демонстрация связки ресурсов
import java.util.*;
class LRBDemo {
public static void main(String a r g s []) {
// Загрузить связку по умолчанию rd = Англоязычная версия "Строка для ключа Title: " + Строка для ключа StopText: " +

r d Строка для ключа StartText: " +
rd.getString("StartText"));
// Загрузить немецкую связку = ResourceBundle.getBundle("SampleRB",
Locale.GERMAN);
System.out.println("ХпНемецкоязычная версия "Строка для ключа Title: " + Строка для ключа StopText: " +
r d Строка для ключа StartText: " +
r d .getString("StartText"));
Глава 18. Пакет java.util: прочие служебные классы 9 Вывод этой программы будет таким.
Англоязычная версия:
Строка для ключа Title: My Program Строка для ключа StopText:
Stop Строка для ключа StartText: Start
Немецкоязычная версия:
Строка для ключа Title: Mein Programm Строка для ключа StopText: Anschlag Строка для ключа StartText: Прочие служебные классы и интерфейсы
В дополнение к уже описанным классам, пакет j a v a . u t i l содержит классы, перечисленные в табл. Таблица
1 8 . 2 0 . Дополнительные классы пакета
j a v a . u t i l
Класс
Описание
EventListenerProxy
Расширяет класс
Event
Li stener для принятия дополнительных параметров. См. в главе 23 обсуждение слушателей событий ect
Суперкласс для всех классов событий. События обсуждаются в главе Определяет флаги форматирования, используемые винтер фейсе
Formattable
Obj Различные методы, которые работают с объектами. Добавлено в JDK 7)
P Управляет правами доступа к свойствам
ServiceLoader
Обеспечивает средства нахождения поставщиков служб
UUID
Инкапсулирует универсальные уникальные идентификаторы
(Universally Unique Identifier — UUID) и управляет ими
Интерфейсы, описанные в табл. 18.21, также входят в состав пакета j a v a . u t i l Таблица 18.21. Дополнительные интерфейсы пакета

j a v a . u t i l
Интерфейс_________Описание
___________ _________________________
E v e n tL is te n e r Указывает, что класс является слушателем событий. События обсуждаются в главе 23
F o rm a tta b le Описывает класс, обеспечивающий специальное настраиваемое форматирование_____________________________________
Вложенные пакеты
j a v a . u t i l
Java определяет следующие вложенные пакеты j a v a . u t i 1.
• j a v a . u t i l . c o n c u r r e n t
• j a v a . u t i l . c o n c u r r e n t . a t o m i c
• j a v a . u t i l . c o n c u r r e n t . l o c k s
• j a v a . u t i l . j a r
• j a v a . u t i l . l o g g i n g

5 9 Часть II. Библиотека Java
• j a v a . u t i l . p r e f s
• j a v a . u t i l . r e g e x
• j a v a . u t i l . s p i
• j a v a . u t i l . z i Ниже все они кратко описаны.
Пакеты
j a v a . u t i l , c o n c u r r e n t , j a v a .
u t i l . c o n c u r r e n t . a t o m i c , j a v a .
u t i l . c o n c u r r e n t . l o c k Пакет j a v a . u t i l . c o n c u r r e n t , наряду сего двумя внутренними пакетами, j a v a . u t i l . c o n c u r r e n t . a t o m i c и j a v a . u t i l . c o n c u r r e n t . l o c k s , предназначен для поддержки параллельного программирования. Эти пакеты предлагают высокопроизводительную альтернативу применению встроенных в Java средств синхронизации, когда требуются безопасные в отношении потоков операции. Начиная с JDK 7 пакет j a v a . u t i l . c o n c u r r e n t также поддерживает инфраструктуру. Эти пакеты подробно рассматриваются в главе Пакет Этот пакет предлагает возможность чтения и записи архивных файлов Java
Archive Пакет Данный пакет обеспечивает поддержку журналов активности программ, которые могут быть использованы для записи действий программа также для поиска проблем и отладки.
П акет
j a v a . u t i l . p r e f Этот пакет обеспечивает поддержку пользовательских предпочтений. Обычно применяется для поддержки конфигураций программ.
П акет
j a v a . u t i l . r e g e Этот пакет обеспечивает поддержку работы с регулярными выражениями. Он подробно описан в главе Пакет
j a v a . u t i l . s p Этот пакет обеспечивает поддержку поставщиков служб.
Пакет
j a v a . u t i l . z i Данный пакет обеспечивает возможность чтения и записи файлов архивов в популярных форматах ZIP и GZIP. Доступны также входные и выходные потоки
ZIP и GZIP.
ГЛАВА ; f ^
* * *
^ / v-

Ы & . . Л ........................ *">..........................................
Ввод-вывод: пакет Эта глава посвящена пакету j a v a . i о, поддерживающему операции ввода- вывода. В главе 13 представлен краткий обзор системы ввода-вывода Java, включая базовые методики чтения и записи файлов, обработки исключений ввода-вывода и закрытия файла. Здесь же рассмотрим систему ввода-вывода Java более подробно.
Как известно всем программистам с давних времен, большинство программ не может выполнять свою работу, не имея доступа к внешним данным. Данные извлекаются из источника ввода Результат программы направляется в вывод На языке
Java эти понятия определяются очень широко. Например, источником ввода или местом вывода может служить сетевое соединение, буфер памяти или дисковый файл — всеми ими можно манипулировать при помощи классов ввода-вывода Java. Хотя физически они совершенно различны, все эти устройства описываются единой абстракцией — потоком Поток, как уже объяснялось в главе 13, — этологическая сущность, которая выдает или получает информацию. Поток присоединен к физическому устройству при помощи системы ввода-вывода Java. Все потоки ведут себя похоже, даже несмотря на то, что физические устройства, к которым они присоединены, в корне отличаются.
На заметку Потоковая система ввода-вывода, используемая пакетом
j a v a . i o и описанная в этой главе, была частью языка Java начиная сего первого выпуска и широко используется до сих пор. Однако начиная с версии 1.4 в язык Java была добавлена вторая система
ввода-вывода. Она называется N10 (что первоначально было акронимом от New I/O (новый
ввод-вывод)). Система N10 расположена в пакете
j a v a . n i o и его внутренних пакетах. С выпуском комплекта JDK 7 возможности системы N10 были существенно расширены, и популярность ее использования, как ожидается, возрастет. Система N10 описана в главе Классы и интерфейсы ввода-вывода Классы ввода-вывода, определенные в пакете j a v a . i o , перечислены ниже

feredlnputStream
FileWriter
PipedOutputStream
BufferedOutputStream
FilterInputStream
PipedReader
BufferedReader
FilterOutputStream
PipedWriter
BufferedWriter
FilterReader
PrintStream
ByteArrayInputStream
FilterWriter
PrintWriter
ByteArrayOutputStream
InputStream
PushbacklnputStream

5 9 Часть II. Библиотека Java
CharArrayReader
InputStreamReader
PushbackReader
CharArrayWriter
LineNumberReader
RandomAccessFile
Console
Obj ectlnputStream
Reader
DatalnputStream
ObjectInputStream.
GetField
SequenceInputStream
DataOutputStream
Obj ectOutputStream
SerializablePermission
File
Obj ectOutputStream.
PutField
StreamTokenizer
FileDescriptor
Obj ectStreamClass
StringReader
Filelnputstream
Obj Пакет j ava.
i о также содержит два устаревших (deprecated) класса, которые не показаны в приведенном выше перечне, а именно — классы
LineNumberlnputStream и
StringBuf fer
Input
St ream. Эти классы не должны использоваться в новом коде. В пакете j ava.
io определены следующие интерфейсы ectlnputValidation

Datalnput
FilenameFilter
Obj ectOutput
DataOutput
Flushable
Obj ectStreamConstants
Externalizable
Obj Как видите, в пакете j ava
. i o присутствует множество классов и интерфейсов. Среди них — байтовые и символьные потоки, сериализация объектов (их сохранение и восстановление. В настоящей гдаве рассматривается несколько наиболее широко используемых компонентов ввода-вывода. Новый класс
Console также описан. Начнем обсуждение с одного из наиболее отличающихся классов ввода- вывода — Класс Хотя большинство классов, определенных в пакете java. io, работают с потоками, класс
File этого не делает. Он имеет дело непосредственно с файлами и файловой системой. То есть класс
File не указывает, как извлекается и сохраняется информация в файлах он описывает свойства самих файлов. Объект класса
File служит для получения информации и манипулирования информацией, ассоциированной с дисковым файлом, такой как права доступа, время, дата и путь к каталогу, а также для навигации по иерархиям подкаталогов.
На заметку Интерфейс
Path и класс

Files, добавленные в систему N10 комплектом JDK являются серьезной альтернативой классу

File во многих случаях. Более подробная информация по этой теме приведена в главе Класс
File
— первичный источники место назначения для данных во многих программах. Хотя существует несколько ограничений в части использования файлов в аплетах (из соображений безопасности, тем не менее они продолжают оставаться центральным ресурсом для хранения постоянной и разделяемой информации
Глава 19. Ввод-вывод: пакет java.io
5 9 Каталог в Java трактуется как объект класса F i l e с единственным дополнительным свойством — списком имен файлов, которые могут быть получены методом l i s t (Для создания объектов класса F i l e могут быть использованы следующие конструкторы
путьКкаталогу)
File(String
путьКкаталогу,
String
имяфайла)
File(File
объектКаталога,
String
имяфайла)
File(URI объект и ш Здесь путьКка тало ту—это путь к файлу имяфайла — имя файла или подкаталога объектКаталога — объект класса F i l e , указывающий каталога объектиК1 — объект
URI, описывающий файл.
В следующем примере создается три файла
f 1
,
f
2 и
f
3
. Первый объект класса
F i l e создается с путем к каталогу в единственном аргументе. Второй включает два аргумента — путь и имя файла. Третий включает путь, присвоенный файлу
f
1, и имя файла объект файла
f
3 ссылается на тот же файл, что и
f
2.
File
fl
= new
F i l e ("/");
File
f2
= new F i l e ("/","autoexec.b a t ");
File
f3
= new F i l e (Наз ам етку !
Java корректно обращается с разделителями пути, которые отличаются в UNIX и Windows. Если вы используете прямой слеш ( / ) в версии Java, то путь будет все равно сформирован корректно. Помните, однако, что для использования символа обратного слеша ( \ ) в Windows следует применять в строках управляющую последовательность ( \ \) Класс
F i l e определяет множество методов, представляющих стандартные свойства объекта класса
File. Например, метод
g e t N a m e
() возвращает имя файла, метод
g e t
P a r e n t
() — имя родительского каталога, а метод
e x i s t s
() — значение
true, если файл существует, и значение
f a l s e — если нет. Однако класс
F i l e несимметричен. В нем есть несколько методов, позволяющих проверять свойства простого файлового объекта, у которых нет дополняющих их методов изменения этих атрибутов.
В следующем примере демонстрируется применение нескольких методов класса
File. Здесь подразумевается, что в корневом каталоге существует каталог по имении что он содержит файл по имени
C O P Y R I G H T .
// Демонстрация работы с File,
import java.io.File;
class FileDemo {
static void p(String s) {
System.out.println(s );
}
public static void main(String a r g s []) {
File fl = new F i l e ("/j ava/COPYRIGHT");
р("Имя файла " + f1.g etName());
р("Путь: " + f1.g etPath());
p (Абсолютный путь " + f1.getAbsolutePath());
p (Родительский каталог " + f1.getParent());
p (f l .exists() ? "существует" :
"не существует (f l .canWrite() ? "доступен для записи" недоступен для записи р (f1.canRead() ? "доступен для чтения" недоступен для чтения р (f1.isDirectory() ? "является каталогом" не является каталогом р (f1.isFile() ? "является обычным файлом" :

5 9 Часть II. Библиотека может быть именованным каналом р (f1.isAbsolute() ? "является абсолютным" не является абсолютным
р("Время модификации " + f1.lastModified());
р("Размер: " + fl.length() + " байт");
}
}
Эта программа выдает нечто вроде следующего.
Имя файла Путь Абсолютный путь Родительский каталог \java
существует
доступен для записи
доступен для чтения
не является каталогом
является обычным файлом
не является абсолютным
Время модификации Размер 695 байт
Большинство методов класса
File самоочевидно, но методы isFile
() и is-
Absolute()
— нет. Метод isFile
() возвращает значение true, если вызывается с файлом, и значение false
— если с каталогом. Также метод isFile
() возвращает значение f a l s e для некоторых специальных файлов, таких как драйверы устройств и именованные каналы, поэтому этот метод может применяться для гарантии того, что данный файл действительно ведет себя как файл. Метод isAb­
solute
() возвращает значение true, если файл имеет абсолютный путь, и значение false — если относительный.
Класс F i l e включает также два полезных служебных метода. Первый из них, метод гепашеТо ()
, показан ниже
boolean renameTo(File
новоеИмя)
Здесь имя файла, указанное в параметре новоеИ м я, становится новым именем вызывающего объекта класса F i l e . Метод возвращает значение t r u e в случае успеха и значение f a l s e — в случае неудачи, если файл не может быть переименован если вы пытаетесь переименовать файл, указывая имя существующего файла).
Второй служебный метод — d e l e t e (), который удаляет дисковый файл, представленный путем вызывающего объекта класса F i l e ,
boolean dele t e (Также вы можете использовать метод d e l e t e () для удаления каталога, если он пуст. Метод d e l e t e () возвращает значение t r u e , если ему удается удалить файл, и значение f a l s e , если файл не может быть удален. В табл. 19.1 приведено еще несколько методов класса F i l e , которые вы наверняка сочтете полезными.
Таблица 19.1. Полезные методы класса
F i l Метод
, Описание) Удаляет файл, ассоциированный с вызывающим объектом,
по завершении работы виртуальной машины Java
long getFreeSpace () Возвращает количество свободных байтов хранилища,
доступных в разделе, ассоциированном с вызывающим объектом getTotalSpace () Возвращает емкость хранилища раздела, ассоциированного с вызывающим объектом
Глава 19. Ввод-вывод: пакет java.io
5 9 Окончание табл. 19.1

Метод
Описание
long g e t U s a b l e S p a c e ()
boolean isHidden()
boolean
s e t L a s t M o d i f i e d (long миллисекунд (Возвращает количество доступных, годных к употреблению свободных байтов, находящихся в разделе, ассоциированном с вызывающим объектом
Возвращает значение
true, если вызывающий файл является скрытыми значение
false — в противном случае
Устанавливает временную метку для вызываемого файла в значение миллисекунд,
которое представляет количество миллисекунд, прошедших с 1 января 1970 г, по Делает вызывающий файл доступным только для чтения
Также существуют методы, помечающие файлы как доступные только для чтения, записи или выполнения. Поскольку класс
File реализует интерфейс
Comparable, также поддерживается метод compareTo (Комплект JDK 7 добавляет в класс
File новый метод по имени to
Path ()
, который выглядит так toP a t h Метод toPathO возвращает объект интерфейса, который представляет файл, инкапсулируемый вызываемым объектом класса
File. Другими словами, метод toPath
() преобразует объект класса
File в объект интерфейса это новый интерфейс, добавленный в JDK 7. Он находится в пакете j ava.
nio.
file и является частью системы NIO. Таким образом, метод toPath
() формирует мост между старым классом
File и новым интерфейсом
Path. Более подробная информация об интерфейсе приведена в главе 20.)
Каталоги
Каталог — это объект класса
File, содержащий список других файлов и каталогов. После создания объекта класса
File, являющегося каталогом, его метод is­
Directory
() вернет значение true. В этом случае вы можете вызвать для этого объекта метод list ()
, чтобы извлечь список других файлов и каталогов, находящихся внутри него. Упомянутый метод имеет две формы. Вот первая из них.
String [] l i s t Список файлов возвращается в виде массива объектов класса
String. Приведенная ниже программа иллюстрирует использование метода list
() для просмотра содержимого каталога Использование каталогов
1   ...   49   50   51   52   53   54   55   56   ...   90


написать администратору сайта