Слайд 1Пакет java.util.
Класс Collections
Класс Collections (не следует путать с интерфейсом Collection)
содержит статические методы всевозможных преобразований коллекций: сортировку, ротацию и перемешивание списков, преобразование одних представлений в другие, быстрый поиск элементов, создание копий коллекций с заданными свойствами и многие другие. Прежде, чем начать писать, например, метод поиска максимального элемента в коллекции или разворачивание списка задом наперед, рекомендуется заглянуть в описание класса Collections.
Реализации большинства коллекций и отображений Java2 не предназначены для использования в многопоточной среде по умолчанию. Если при разработке многопоточного приложения можно не стремиться к очень высокой эффективности, то в классе Collections есть статические методы, позволяющие получать "синхронизированные" экземпляры различных типов коллекций из обычных.
С использованием этого же класса можно получить пустую коллекцию, коллекцию из единственного заданного элемента, неизменяемый экземпляр любой коллекции.
Слайд 2Пакет java.util.
Классы BitSet и Arrays
Класс BitSet предназначен для работы с
совокупностями битов. Каждый компонент этой коллекции может принимать двоичное значение (при выборке преобразуемое в булево), которое обозначает, установлен бит или нет. Содержимое BitSet может быть модифицировано содержимым другого BitSet с использованием операций AND, OR или XOR (исключающее или).
Установка и очистка битов в BitSet осуществляется методами set( int index ) и clear( int index ). Метод int length( ) возвращает "логический" размер набора битов, int size( ) возвращает количество памяти, занимаемой битовой последовательностью BitSet.
Класс Arrays (не имеющий конструктора) предоставляет набор полезных статических методов для выполнения операций над массивами всех примитивных и объектных типов, таких как:
бинарный поиск
копирование всего/части массива в/из массив возможно другого размера
сравнение массивов
заполнение массивов
сортировка
В Arrays также определен статический метод public List aList( a[ ] arr ), который возвращает список фиксированного размера, основанный на заданном массиве. Изменения значений элементов в массиве автоматически отражаются в списке.
Слайд 3Пакет java.util.
Класс Locale
Класс Locale предназначен для отображения определенного региона. Под
регионом принято понимать не только географическое положение, но также языковую и культурную среду. Например, помимо того, что указывается страна Швейцария, можно указать также и язык - французский или немецкий. Имеется два варианта конструкторов:
Locale( String language, String country )
Locale( String language, String country, String variant )
Первые два аргумента определяют язык и страну (согласно кодировке ISO), для которой определяется локаль. Список поддерживаемых стран и языков можно получить с помощью вызова статических методов Locale.getISOLanguages() и Locale.getISOCountries(), соответственно. Во втором варианте конструктора указан также строковый параметр variant, в котором кодируется информация о платформе. Примеры использования:
Locale l = new Locale( "ru", "RU" );
Locale l = new Locale( "en", "US", "WINDOWS" );
Статический метод getDefault( ) возвращает текущую локаль, сконструированную на основе настроек операционной системы, под управлением которой функционирует JVM.
Класс Locale используется для корректного выполнения перекодировок текстов, представления даты/времени (совместно с классами Calendar, GregorianCalendar, TimeZone, SimpleTimeZone), валюты (совместно с классом Currency), численных данных, и т.п.
Слайд 4Пакет java.util.
Класс Date
В языке Java существует много инструментов для обработки
дат. Некоторые из них являются намного более неудобными, чем инструменты, доступные в других языках программирования. Тем не менее практически нет ничего, чего нельзя было бы сделать при создании и форматировании дат любым требуемым образом с использованием этих инструментов.
Начиная с самой первой версии в Java существует класс с именем Date, который поначалу был довольно полезным для создания и управления датами. К сожалению, этот класс не достаточно хорошо поддерживал интернационализацию, поэтому большинство методов этого класса было объявлено устаревшими и запрещенными к использованию.
В версиях 1.1 и 1.2 были добавлены класса, предназначенных для исправления ситуации:
java.util.Calendar и java.util.GregorianCalendar – для манипуляций с датой/временем
java.text.DateFormat, java.text.SimpleDateFormat и java.text.DateFormatSymbols – для форматирования даты/времени.
Создать экземпляр класса Date очень просто:
Date aDate = new Date( );
При этом будет получен объект Date, представляющий точную текущую дату и время в формате текущих региональных настроек (locale). Другой способ сделать то же самое:
Date aDate = new Date( System.currentTimeMillis( ) );
А так можно создать экземпляр, соответствующий моменту последней модификации файла:
Date aDate = new Date( file.lastModified( ) );
Не запрещенные методы класса позволяют:
сравнить одну переменную Date с другой, чтобы узнать, идет ли первая до ( before( ) ) или после ( after( ) ) второй.
установить новый момент времени, вызвав метод setTime( ) с аргументом типа long, представляющей количество миллисекунд, прошедших после полуночи 1 января 1970 года.
Больше ничего.
Слайд 5Пакет java.util.
Классы Calendar и GregorianCalendar(1)
Calendar является абстрактным классом. Для
различных платформ реализуются конкретные подклассы календаря. На данный момент существует реализация Григорианского календаря - GregorianCalendar. Экземпляр этого класса получается путем вызова статического метода getInstance(), который возвращает экземпляр класса GregorianCalendar, сформированный по настройкам ОС.
Calendar обеспечивает набор методов, позволяющих манипулировать различными "частями" даты, т.е. получать и устанавливать дни, месяцы, недели и т.д. Дату/время можно полностью переопределить с помощью вызова метода
void set( int year, int month, int date, int hourOfDay, int minute, int second );
Для считывания и установки различных "частей" даты используются методы get( int field ), set( int field, int value ), add( int field, int amount ), roll( int field, int amount ) Аргумент с именем field указывает на номер поля, с которым нужно произвести операцию. Все эти поля определены в Calendar как статические константы типа int.
Есть важная особенность применения метода set( int field, int value ):
На самом деле после вызова этого метода немедленного пересчета даты не производится. Пересчет даты будет осуществлен только после вызова любого из методов get( ), getTime( ) или getTimeInMillis( ). Таким образом, последовательная установка нескольких полей не вызовет ненужных вычислений и нежелательных побочных эффектов, вызванных разным количеством дней в разных месяцах.
Совместно с этими классами в сетевых приложениях при необходимости можно использовать абстрактный класс TimeZone и его реализацию SimpleTimeZone, предоставляющими информацию о часовых поясах.
Слайд 6Пакет java.util.
Классы Calendar и GregorianCalendar(2)
Экземпляры класса GregorianCalendar можно создавать
так:
Calendar calendar = GregorianCalendar.getInstance( );
calendar.setTimeInMillis( System.currentTimeMillis( ) );
Нужные значения полей устанавливаются так:
calendar.set( Calendar.MONTH, Calendar.JULY );
calendar.set( Calendar.DAY_OF_MONTH, 15 );
calendar.set( Calendar.YEAR, 1978 );
calendar.set( Calendar.HOUR, 2 );
calendar.set( Calendar.MINUTE, 15 );
calendar.set( Calendar.SECOND, 37 ); // calendar.set( 1978, Calendar.JULY, 15, 2, 15, 37 );
System.out.println( calendar.getTime( ) );
При этом будет выведена отформатированная по стандарту GMT строка:
Sat Jul 15 02:15:37 GMT 1978
Значения для Calendar.MONTH начинаются с нуля (то есть, январь равен 0), что удобно для их установки путем использования именованных констант, но может запутывать корректное отображение дат.
Часы имеют значения от 0 до 24 (25 разных значений!).
Имея экземпляр даты, можно извлечь из него различные компоненты:
System.out.println( "Год: " + calendar.get( Calendar.YEAR ) );
System.out.println( "Месяц: " + calendar.get( Calendar.MONTH ) );
…
System.out.println( "Секунда: " + calendar.get( Calendar.SECOND ) );
System.out.println( "AM-PM индикатор: " + calendar.get( Calendar.AM_PM ) );
Слайд 7Пакет java.text.
Средства форматирования дат (1)
Абстрактный класс java.text.DateFormat позволяет создать средство
форматирования, зависящее от региональных настроек, следующим образом:
DateFormat dateFormatter = DateFormat.getDateInstance( DateFormat.DEFAULT );
Теперь, если имеется экземпляр даты:
Date today = new Date( );
то можно получить форматированную строку даты с форматом для текущего региона по умолчанию (DEFAULT):
String formattedDate = dateFormatter.format( today );
DEFAULT – стиль по умолчанию.
Существует еще 4 стиля: SHORT, MEDIUM, LONG и FULL. Вид получаемого форматированного представления даты в каждом из этих стилей зависит от текущей локали. Аналогичные стили существуют для форматированного представления времени, экземпляр форматтера нужно получать с помощью вызова:
DateFormat.getTimeInstance( … ).
И, наконец, для форматирования и даты, и времени:
DateFormat.getDateTimeInstance( … ).
Вот вид даты и времени в разных стилях для локали ru.RU:
DEFAULT: 05.11.2012 4:29:36
SHORT: 05.11.12 4:29
MEDIUM: 05.11.2012 4:29:36
LONG: 5 Ноябрь 2012 г. 4:29:36 GMT
FULL: 5 Ноябрь 2012 г. 4:29:36 GMT
Слайд 8Пакет java.text.
Средства форматирования дат (2)
Предопределенные форматы подходят для большинства случаев,
но при необходимости можно использовать класс java.text.SimpleDateFormat для определения собственных форматов.
Использовать SimpleDateFormat не сложно. Вот пример:
Date today = new Date( );
SimpleDateFormat formatter = new SimpleDateFormat( "dd_MM_yyyy | hh:mm" );
System.out.println( formatter.format( today ) );
При выполнении этого кода будет получен примерно следующий результат (естественно, он будет отражать текущую дату во время выполнения кода):
05_11_2012 | 4:29
Выделенная кавычками строка в приведенном выше примере следует синтаксическим правилам для шаблонов форматирования дат. Всего имеется чуть больше 20 символов для обозначения полей даты/времени. Вот некоторые полезные практические правила:
Можно указать шаблоны и для даты и для времени.
В шаблон можно включить текстовые литералы, поместив их в одиночные кавычки (например, использование шаблона "'по дату' dd_MM_yyyy" в приведенном выше примере выдаст следующий результат: по дату 05_11_2012).
Количество символов в текстовом компоненте шаблона указывает на то, какая форма отображения используется - сокращенная или полная ("MM" выдает 11, но "MMM" выдает Ноя, а "MMMM" - Ноябрь).
Количество символов в числовом компоненте шаблона указывает минимальное число цифр.
Некоторые элементы синтаксиса шаблонов не очень интуитивны (например, mm определяет шаблон для минут из двух цифр; для получения сокращения месяца используется MM).
Слайд 9Пакет java.text.
Средства форматирования дат (3)
Если стандартные символы шаблонов класса java.text.SimpleDateFormat
все равно не удовлетворяют требованиям к форматированию, можно использовать класс
java.text.DateFormatSymbols для настройки символов представления любого компонента Date или времени. Например, можно было бы реализовать уникальный набор сокращений месяцев года, используя тот же самый SimpleDateFormat:
DateFormatSymbols symbols = new DateFormatSymbols( );
String[ ] MonthAbbreviations = new String[ ] {
"Ян", "Фе", "Мр", "Ап", "Мй", "Ин", "Ил", "Ав", "Се", "Ок", "Но", "Де"
};
symbols.setShortMonths( MonthAbbreviations );
formatter = new SimpleDateFormat( "dd-MMM, yyyy", symbols );
formattedDate = formatter.format( new Date( ) );
System.out.println( formattedDate );
Этот код вызывает другой конструктор SimpleDateFormat, который принимает строку шаблона и экземпляр DateFormatSymbols, определяющий используемые при появлении в шаблоне краткого месяца сокращения. При форматировании даты с использованием этих символов результат выглядит примерно так (для приведенного выше Date):
5-Но, 2012
Класс DateFormatSymbols имеет методы для настройки обычного, короткого и полного представления каждого элемента даты/времени. Соответственно, возможностей настройки SimpleDateFormat и DateFormatSymbols должно быть достаточно для создания любого необходимого формата.
Слайд 10Пакет java.util.
Класс UUID
Иногда требуется генерировать имена файлов случайным образом.
Например, это может потребоваться в том случае, если нескольким программам необходимо записывать файлы в каталог, который постоянно сканируется другим приложением, считывающим все новые файлы с определенной структурой имени для дальнейшей обработки. Есть вероятность того, что файл будет считан в тот момент, когда его запись программой-источником еще не завершилась. Выходом может быть запись файла в каталог с таким именем, которое не воспринимается обработчиком файлов, а затем в его переименовании. В подобных случаях необходимо использовать уникальное имя файла, для чего наилучшим образом подходит формат стандарта UUID. Класс UUID является реализацией стандарта (и аналогичен формату GUID от Microsoft). Механизм генерации идентификатора UUID или GUID предполагает, что в точности такой же идентификатор никем и никогда не будет сгенерирован повторно. Это не гарантируется на 100%, но вероятность повторения идентификатора исчезающе мала в практическом смысле. Поэтому можно считать, что сгенерированный идентификатор является уникальным.
Пример Java кода, генерирующего уникальное имя файла с расширением txt при помощи класса UUID:
...
UUID id = UUID.randomUUID( );
String filename = id.toString( ).replaceAll( "-","" ) + ".txt";
System.out.println(filename);
...
Так как стандартный вид формата UUID включает в себя символы "-", то для использования его в качестве имени файла они удаляются с помощью replaceAll( ).
Слайд 11Пакет java.util.
Класс ResourceBundle
Абстрактный класс ResourceBundle предназначен для организации хранения объектов,
специфичных для каждой локали. Когда необходимо получить набор строк, зависящих от локали, используют ResourceBundle. Таким набором может быть совокупность надписей компонент графического интерфейса.
Применение ResourceBundle настоятельно рекомендуется, если разрабатывается приложение для многоязыковой среды. С помощью этого класса легко можно манипулировать наборами ресурсов, зависящих от локалей, их можно менять, добавлять новые и т.д.
Набор ресурсов - это набор классов, имеющих одно базовое имя (должен существовать файл .class с базовым именем). Наименование класса дополняется наименованием локали, с которой связывается этот класс. Например, если имя базового класса будет MyResources, то для английской локали имя класса будет MyResources_en, для русской - MyResources_ru. Загрузка объекта для нужной локали производится с помощью статического метода getBundle( ):
ResourceBundle myResources =ResourceBundle.getBundle( "MyResources",Locale );
Наследник ResourceBundle хранит объекты в виде пар ключ/значение. Класс ResourceBundle абстрактный, поэтому при его наследовании необходимо переопределить два метода:
Enumeration getKeys( ) и protected Object handleGetObject( String key ).
Первый метод должен возвращать список всех ключей, которые определены в данном ResourceBundle, второй должен возвращать объект, связанный с указанным ключом.
Слайд 12Пакет java.util.
Класс ResourceBundle
У класса ResourceBundle определено два прямых потомка ListResourceBundle
и PropertiesResourceBundle.
Набор ресурсов для класса PropertiesResourceBundle хранится в текстовых файлах, каждый из которых представляет собой набор Unicode-строк вида:
= .
Имя файла конструируется так: <имяКласса>_<язык>_<страна>.properties
Для того, чтобы создать нужный экземпляр класса, необходимо указать полный путь к этому файлу:
getBundle( "resources.MyResource",Locale.getDefault( ) );
Здесь resources – имя каталога (относительно того, где находится файл .class; возможно указание полного пути), в котором лежит группа файлов с именами MyResource_ru_RU.properties, MyResource_en_US.properties, …
Метод getBundle( ) будет искать указанный файл, при его отсутствии – файл вида <имяКласса>_<язык> .properties, если и такого нет, то файл <имяКласса>.properties. Если же нет и такого, то будет выброшено исключение.
ListResourceBundle хранит набор ресурсов в виде коллекции и является абстрактным классом. Классы, которые наследуют от ListResourceBundle, должны содержать собственно двумерный массив, содержащий ресурсы, и обеспечить переопределение метода Object[ ][ ] getContents(), который возвращает весь массив ресурсов.
Слайд 13Пакет java.util.
Пример использования ResourceBundle (1)
import java.io.*;
import java.util.*;
public class
HamletInternational {
public static void main( String[ ] args ) {
String country = "", language = "";
System.out.println("1 – Английский\n2 – Белорусский\nЛюбой другой - Русский");
char reply = 0;
try {
reply = (char) System.in.read( );
} catch ( IOException e1 ) {
e1.printStackTrace( );
}
switch ( reply ) {
case '1':
country = "US"; language = "EN";
break;
case '2':
country = "BY"; language = "BEL";
}
Слайд 14Пакет java.util.
Пример использования ResourceBundle (2)
Locale current = new Locale( language,
country );
ResourceBundle rb = ResourceBundle.getBundle( "text", current );
try {
System.out.println( rb.getString( "str1" ) );
System.out.println( rb.getString( "str2" ) );
} catch ( UnsupportedEncodingException e ) {
e.printStackTrace( );
}
}
}
Файл text_en_US.properties содержит следующую информацию:
str1 = To be or not to be?
str2 = This is a question.
Файл text_bel_BY.properties: (должен быть обработан утилитой native2ascii.exe)
str1 = Быць або не быць?
str2 = Вось у чым пытанне.
Файл text.properties: (должен быть обработан утилитой native2ascii.exe)
str1 = Быть иль не быть?
\u0411\u044b\u0442\u044c \u0438\u043b\u044c \u043d\u0435 \u0431\u044b\u0442\u044c?
str2 = Вот в чём вопрос.
\u0412\u043e\u0442 \u0432 \u0447\u0451\u043c \u0432\u043e\u043f\u0440\u043e\u0441.
Слайд 15Пакет java.util.
Классы Random и StringTokenizer
Класс Random используется для получения последовательности
псевдослучайных чисел. В качестве "зерна" применяется 48-битовое число. Если для инициализации Random задействовать одно и то же число, будет получена та же самая последовательность псевдослучайных чисел.
В классе Random определено также несколько методов, которые возвращают псевдослучайные величины для примитивных типов Java.
Дополнительно следует отметить наличие двух методов: double nextGaussian( ) - возвращает случайное число в диапазоне от 0.0 до 1.0 распределенное по нормальному закону, и void nextBytes( byte[ ] arr ) - заполняет массив arr случайными величинами типа byte.
Еще один полезный класс – StringTokenizer.
Этот класс предназначен для разбора строки по лексемам (tokens). Строка, которую необходимо разобрать, передается в качестве параметра конструктору StringTokenizer( String str ). Определено еще два перегруженных конструктора, которым дополнительно можно передать строку-разделитель лексем StringTokenizer(String str, String delim) и признак возврата разделителя лексем StringTokenizer(String str, String delim, Boolean returnDelims). Разделителем лексем по умолчанию служит пробел.
Экземпляр этого класса реализует методы интерфейса Enumeration, позволяя перебирать построенную коллекцию лексем.
Слайд 16Пакет java.util.
Класс Scanner
Класс Scanner обеспечивает сравнительно простой API для разбивки
структурированного текста на строго типизированные части. Набор конструкторов с разными аргументами позволяет связать создаваемый экземпляр с потоком ввода (в том числе с System.in), файлом и просто со строкой.
Обширный набор методов вида * next*( ), где * - это boolean, byte, int, short, long, float, double, BigInteger, BigDecimal, Line (String) с возможным указанием шаблонов поиска или оснований системы счисления, предоставляет возможность простого разбора входного потока на токены (фрагменты, удовлетворяющие правилам образования литералов соответствующего типа, например: true 125, 37561888,1234, 12345678901, 3.14159, 2.7182818284590452354, …).
Для предварительной проверки существования токенов перед их чтением есть набор методов boolean hasNext*( ).
Ненужные токены, присутствующие во входном потоке, можно пропускать с помощью методов skip( ).
Имеются методы, позволяющие задавать/получать используемые экземпляром класса Scanner разделители токенов, шаблоны поиска, основание системы счисления, локаль.
Слайд 17Пакет java.util.
Класс Formatter
Класс Formatter преобразует двоичную форму представления данных в
форматированный текст, который сохраняется во внутреннем буфере. Обеспечиваются преобразования, позволяющие представлять числа, строки, время и даты в любом необходимом виде. Содержимое буфера может быть получено в виде строки, может быть сохранено в нужном файле. Преобразования выполняются методом format( ), существующем в двух вариантах:
Formatter format( String format, Object... args );
Formatter format( Locale locale, String format, Object... args );
Этот метод фактически неявно вызывается из одноименного метода класса String.
Для создания объекта класса Formatter существует множество конструкторов, позволяющих связать создаваемый экземпляр с такими объектами, как файл (существует несколько способов задания целевого файла), поток вывода, в частности – поток печати, в частности – поток консоли, экземплярами классов, реализующими интерфейс java.lang.Appendable (например – StringBuffer и StringBuilder). Вывод сформатированных данных в связанный объект осуществляется автоматически. По умолчанию используется текущая локаль, но требуемую локаль тоже можно задать при создании экземпляра этого класса.
Слайд 18Ввод-вывод
Пакет java.io.
Основная сложность средств ввода-вывода (для всех систем программирования, не
только для Java) состоит в том, что необходимо учесть все возможные ситуации. Это не только наличие множества источников и приемников данных, с которыми необходимо поддерживать связь (файлы, консоль, сетевые соединения), но и реализации различных форм этой связи (последовательный доступ, произвольный, буферизованный, двоичный, символьный, построчный, пословный и т. д.).
В библиотеке ввода/вывода Java с самого первого ее выпуска так много классов, что потеряться в них проще простого (парадоксально, но в действительности система ввода/вывода Java не нуждается в таком количестве классов). Существуют байт-ориентированная и символьно-ориентированная (основанная на Unicode) иерархии классов. В JDK-1.4 появился пакет nіо (от сочетания «new I/O»), призванный улучшить производительность и функциональность.
В результате, чтобы понять общую картину ввода/вывода в Java и начать использовать ее, придется изучить большое количество классов.
При этом надо помнить, что библиотека ввода-вывода обновляется постоянно, поэтому впоследствии могут появиться новые средства и возможности.
Слайд 19Ввод-вывод, введение
Основная сложность средств ввода-вывода (для всех систем программирования, не только
для Java) состоит в том, что необходимо учесть все возможные ситуации. Это не только наличие множества источников и приемников данных, с которыми необходимо поддерживать связь (файлы, консоль, сетевые соединения), но и реализации различных форм этой связи (последовательный доступ, произвольный, буферизованный, двоичный, символьный, построчный, пословный и т. д.).
В библиотеке ввода/вывода Java с самого первого ее выпуска так много классов, что потеряться в них проще простого (парадоксально, но в действительности система ввода/вывода Java не нуждается в таком количестве классов). Существуют байт-ориентированная и символьно-ориентированная (основанная на Unicode) иерархии классов. В JDK-1.4 появился пакет nіо (от сочетания «new I/O»), призванный улучшить производительность и функциональность.
В результате, чтобы понять общую картину ввода/вывода в Java и начать использовать ее, придется изучить большое количество классов.
При этом надо помнить, что библиотека ввода-вывода обновляется постоянно, поэтому впоследствии могут появиться новые средства и возможности.
Слайд 20Пакет java.io.
Класс File
Класс File служит для хранения и обработки в качестве
объектов каталогов и имен файлов. Этот класс не содержит методов для работы с содержимым файла, но позволяет манипулировать такими свойствами файла, как права доступа, дата и время создания, путь в иерархии каталогов, создавать и удалять файлы, изменять имя и каталог и т.д.
Объект класса File создается одним из нижеприведенных способов:
File myFile = new File( "\\com\\myfile.txt" );
File myDir = new File( "c:\\jdk1.6.0\\src\\java\\io" );
File myFile = new File( "c:\\com”, ”myfile.txt" );
File myFile = new File( new URI( "nstu.ru" ) );
В первом случае создается объект, соответствующий файлу, во втором – каталогу. В третьем случае для создания объекта раздельно указываются каталог и имя файла. В четвертом – создается объект, соответствующий адресу в Интернете.
При создании объекта класса File любым из конструкторов не выполняется проверка на существование физического файла с заданным путем.
Существует разница между разделителями, употребляющимися при записи пути к файлу: для системы Unix – “/”, а для Windows – “\\”. Для тех случаев, когда неизвестно, в какой системе будет выполняться код, предусмотрены специальные поля в классе File:
public static final String separator;
public static final char separatorChar;
С использованием этих полей можно задать путь, универсальный в любой системе:
File myFile = new File(File.separator + ”com” + File.separator + ”myfile.txt” );
Предусмотрен еще один тип разделителей – для директорий:
public static final String pathSeparator; (в Unix – ”;”, а в Windows – ”:”)
public static final char pathSeparatorChar;
Слайд 21Пакет java.io.
Класс File. Пример (1).
import java.util.*;
import java.io.*;
import java.text.*;
public class Main {
public
static void main( String[ ] args ) {
File thisFile = new File( "src" + File.separator + "Main.java" );
if ( thisFile.exists( ) ) {
System.out.println( "Файл " + thisFile.getName() + " существует" );
if ( thisFile.isFile( ) ) { // если объект – дисковый файл
System.out.println( "Путь к файлу:\t" + thisFile.getPath( ) );
System.out.println( "Абсолютный путь:\t" + thisFile.getAbsolutePath( ) );
System.out.println( "Размер файла:\t" + thisFile.length( ) );
System.out.println( "Последняя модификация :\t"
+ new Date( thisFile.lastModified( ) ) );
System.out.println( "Файл доступен для чтения:\t" + thisFile.canRead( ) );
System.out.println( "Файл доступен для записи:\t" + thisFile.canWrite( ) );
}
} else
System.out.println("Файл " + thisFile.getName() + " не существует");
Слайд 22Пакет java.io.
Класс File. Пример (2).
File dir = new File( "bin" );
if
( dir.exists( ) && dir.isDirectory( ) ) { // если объект является каталогом и существует
System.out.println( "Каталог " + dir.getName( ) + " существует" );
File[ ] files = dir.listFiles( );
for ( int i = 0; i < files.length; i++ ) {
Date date = new Date( files[ i ].lastModified( ) );
// DateFormat dateFormatter =
// DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
SimpleDateFormat dateFormatter =
new SimpleDateFormat( "dd.MMMM.yyyy hh:mm" );
System.out.print( "\n" + files[ i ].getPath( ) + " \t| "
+ files[ i ].length( ) + "\t| " + dateFormatter.format( date ) );
}
File root = File.listRoots( )[0];
System.out.printf( "\n%s %,d из %,d свободно.", root.getPath( ), root.getUsableSpace( ), root.getTotalSpace( ));
}
}
}
Слайд 23Пакет java.io.
Класс File. Основные методы (1)
Слайд 24Пакет java.io.
Класс File. Основные методы (2)
Слайд 25Пакет java.io.
Класс File. Основные методы (3)
Слайд 26Пакет java.io.
Класс File. Основные методы (4)
Слайд 27Пакет java.io.
Класс File. Основные методы (5)
Слайд 28Пакет java.io.
Класс File. Пример 2.
import java.util.regex.*;
import java.io.*;
import java.util.*;
public class DirList {
public static void main( String[ ] args ) { // например: t.*\.p.*
File path = new File( "." ); // вариант: t.*_.*\.p.*
String[ ] list;
if( args.length == 0 )
list = path.list( ); // список всех файлов и каталогов
else
list = path.list( new DirFilter( args[0] ) ); // в соответствии с фильтром
Arrays.sort( list, String.CASE_INSENSITIVE_ORDER ); // по возрастанию без учета
for( String dirItem : list ) // регистра символов
System.out.println( dirItem );
}
}
class DirFilter implements FilenameFilter { // реализация интерфейса FilenameFilter
private Pattern pattern;
public DirFilter( String regex ) {
pattern = Pattern.compile( regex );
}
public boolean accept( File dir, String name ) {
return pattern.matcher( name ).matches( );
}
}
text.properties
text_bel_by.properties
text_en_us.properties
text_bel_by.properties
text_en_us.properties
Слайд 29Пакет java.io.
Класс File. Пример 3.
import java.util.regex.*;
import java.io.*;
import java.util.*;
public class DirList {
public static void main( final String[ ] args ) { // например: t.*\.p.*
File path = new File( "." ); // вариант: t.*_.*\.p.*
String[ ] list;
if( args.length == 0 )
list = path.list( ); // список всех файлов и каталогов
else
list = path.list( new FilenameFilter() { // анонимный внутренний класс
private Pattern pattern = Pattern.compile( args[ 0 ] );
public boolean accept( File dir, String name ) {
return pattern.matcher(name).matches( );
}
});
Arrays.sort( list, String.CASE_INSENSITIVE_ORDER ); // по возрастанию for( String dirItem : list )
System.out.println( dirItem );
}
}
text.properties
text_bel_by.properties
text_en_us.properties
text_bel_by.properties
text_en_us.properties