Пакет java.util. Класс Collections Класс Collections (не следует путать с интерфейсом Collection) содержит статические методы всевозможных преобразований.

Презентация:



Advertisements
Похожие презентации
Основы ООП и C# Работа с объектами и классами. Классы Класс специальный тип данных для описания объектов. Он определяет данные и поведение типа. Определение.
Advertisements

База данных (БД) – Совокупность определённым образом организованной информации на определённую тему (в рамках определённой предметной деятельности); Организованная.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
Перегрузка операторов x = a + b результат 1-й операнд2-й операнд оператор По количеству операндов операторы делятся на: унарные (один операнд) бинарные.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
b5_java_s4
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
Java. Part 2. Спецификаторы доступа public private protected не указан – доступ в пределах пакета Могут использоваться перед классами, методами, полями.
1 Контрольное зачетное задание (0, 0)(0, m-1) (n-1, 0)(n-1, m-1) Дано прямоугольное поле, расчерченное на клетки: n клеток в высоту и m клеток в ширину.
Файловый тип данных Файл – это область памяти на внешнем носителе, в которой хранится некоторая информация. В языке Паскаль файл представляет собой последовательность.
Потоки Язык C++ не обеспечивает средств для ввода/вывода Ему это и не нужно; такие средства легко и элегантно можно создать с помощью самого языка Традиционно.
Полиморфизм Полиморфизм (polymorphism) - последний из трех "китов", на которых держится объектно-ориентированное программирование Слово это можно перевести.
Лабораторная работа 7. Работа с динамической памятью, строками и файлами.
Урок 3. Формы представления данных (таблицы, формы, запросы, отчеты)
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Java in pictures. Part 3.
Работа с файлами Сазонов Д.О. ПМиЭММ Часть 2. Тема занятия: Работа с файлами через потоки Для реализации файлового ввода/вывода, необходимо включить в.
Полиморфизм. Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
Классы Math, system, Data на языке Java Назарова К
Тип, имя и значение переменной.. Переменные. В объектно-ориентированных языках программирования, и в частности в языке Visual Basic, переменные играют.
Транксрипт:

Пакет java.util. Класс Collections Класс Collections (не следует путать с интерфейсом Collection) содержит статические методы всевозможных преобразований коллекций: сортировку, ротацию и перемешивание списков, преобразование одних представлений в другие, быстрый поиск элементов, создание копий коллекций с заданными свойствами и многие другие. Прежде, чем начать писать, например, метод поиска максимального элемента в коллекции или разворачивание списка задом наперед, рекомендуется заглянуть в описание класса Collections. Реализации большинства коллекций и отображений Java2 не предназначены для использования в многопоточной среде по умолчанию. Если при разработке многопоточного приложения можно не стремиться к очень высокой эффективности, то в классе Collections есть статические методы, позволяющие получать "синхронизированные" экземпляры различных типов коллекций из обычных. С использованием этого же класса можно получить пустую коллекцию, коллекцию из единственного заданного элемента, неизменяемый экземпляр любой коллекции.

Пакет 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 ), который возвращает список фиксированного размера, основанный на заданном массиве. Изменения значений элементов в массиве автоматически отражаются в списке.

Пакет 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), численных данных, и т.п.

Пакет 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 года. Больше ничего.

Пакет 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, предоставляющими информацию о часовых поясах.

Пакет 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 ) );

Пакет 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: :29:36 SHORT: :29 MEDIUM: :29:36 LONG:5 Ноябрь 2012 г. 4:29:36 GMT FULL:5 Ноябрь 2012 г. 4:29:36 GMT

Пакет 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).

Пакет 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 должно быть достаточно для создания любого необходимого формата.

Пакет 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( ).

Пакет 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, второй должен возвращать объект, связанный с указанным ключом.

Пакет 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(), который возвращает весь массив ресурсов.

Пакет 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"; }

Пакет 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.

Пакет 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, позволяя перебирать построенную коллекцию лексем.

Пакет java.util. Класс Scanner Класс Scanner обеспечивает сравнительно простой API для разбивки структурированного текста на строго типизированные части. Набор конструкторов с разными аргументами позволяет связать создаваемый экземпляр с потоком ввода (в том числе с System.in), файлом и просто со строкой. Обширный набор методов вида * next*( ), где * - это boolean, byte, int, short, long, float, double, BigInteger, BigDecimal, Line (String) с возможным указанием шаблонов поиска или оснований системы счисления, предоставляет возможность простого разбора входного потока на токены (фрагменты, удовлетворяющие правилам образования литералов соответствующего типа, например: true 125, ,1234, , , , …). Для предварительной проверки существования токенов перед их чтением есть набор методов boolean hasNext*( ). Ненужные токены, присутствующие во входном потоке, можно пропускать с помощью методов skip( ). Имеются методы, позволяющие задавать/получать используемые экземпляром класса Scanner разделители токенов, шаблоны поиска, основание системы счисления, локаль.

Пакет 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). Вывод сформатированных данных в связанный объект осуществляется автоматически. По умолчанию используется текущая локаль, но требуемую локаль тоже можно задать при создании экземпляра этого класса.

Ввод-вывод Пакет java.io. Основная сложность средств ввода-вывода (для всех систем программирования, не только для Java) состоит в том, что необходимо учесть все возможные ситуации. Это не только наличие множества источников и приемников данных, с которыми необходимо поддерживать связь (файлы, консоль, сетевые соединения), но и реализации различных форм этой связи (последовательный доступ, произвольный, буферизованный, двоичный, символьный, построчный, пословный и т. д.). В библиотеке ввода/вывода Java с самого первого ее выпуска так много классов, что потеряться в них проще простого (парадоксально, но в действительности система ввода/вывода Java не нуждается в таком количестве классов). Существуют байт-ориентированная и символьно- ориентированная (основанная на Unicode) иерархии классов. В JDK-1.4 появился пакет nіо (от сочетания «new I/O»), призванный улучшить производительность и функциональность. В результате, чтобы понять общую картину ввода/вывода в Java и начать использовать ее, придется изучить большое количество классов. При этом надо помнить, что библиотека ввода-вывода обновляется постоянно, поэтому впоследствии могут появиться новые средства и возможности.

Ввод-вывод, введение Основная сложность средств ввода-вывода (для всех систем программирования, не только для Java) состоит в том, что необходимо учесть все возможные ситуации. Это не только наличие множества источников и приемников данных, с которыми необходимо поддерживать связь (файлы, консоль, сетевые соединения), но и реализации различных форм этой связи (последовательный доступ, произвольный, буферизованный, двоичный, символьный, построчный, пословный и т. д.). В библиотеке ввода/вывода Java с самого первого ее выпуска так много классов, что потеряться в них проще простого (парадоксально, но в действительности система ввода/вывода Java не нуждается в таком количестве классов). Существуют байт-ориентированная и символьно- ориентированная (основанная на Unicode) иерархии классов. В JDK-1.4 появился пакет nіо (от сочетания «new I/O»), призванный улучшить производительность и функциональность. В результате, чтобы понять общую картину ввода/вывода в Java и начать использовать ее, придется изучить большое количество классов. При этом надо помнить, что библиотека ввода-вывода обновляется постоянно, поэтому впоследствии могут появиться новые средства и возможности.

Пакет 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;

Пакет 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() + " не существует");

Пакет 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( )); }

Пакет java.io. Класс File. Основные методы (1) booleancanExecute( )Возвращает true, если файл является выполнимым booleancanRead( )Возвращает true, если файл может быть прочитан booleancanWrite( )Возвращает true, если в файл возможна запись данных intcompareTo( File pathname )Лексикографическое сравнение двух абстрактных путей (возвращает -1 или 0 или 1). booleancreateNewFile( )Атомарно создается новый пустой файл с заданным именем, если такой файл не существует, и возвращается true. Если такой файл есть, то возвращается false. static File createTempFile( String prefix, String suffix ) Создается пустой файл в обычном каталоге для временных файлов. Имя конструируется с использованием заданных префикса и суффикса. static File createTempFile( String prefix, String suffix, File directory ) Создается пустой файл в заданном каталоге. Имя конструируется с использованием заданных префикса и суффикса. booleandelete( )Удаляется файл или каталог по заданному имени. voiddeleteOnExit( )Формируется запрос на удаление заданного файла или каталога в тот момент, когда виртуальная машина завершает работу

Пакет java.io. Класс File. Основные методы (2) booleanequals( Object obj )Возвращает эквивалентность абстрактного файла с заданным объектом booleanexists( )Возвращает true, если файл или каталог существует FilegetAbsoluteFile( )Возвращает абсолютную форму абстрактного файла/каталога StringgetAbsolutePath( )Возвращает абсолютный путь абстрактного файла/каталога. Если в имени была использована относительная адресация, то она сохраняется: (C:\Work\JavaProects\pIOTest\..\bin\text.properties) FilegetCanonicalFile( )Возвращает каноническую форму абстрактного файла/каталога StringgetCanonicalPath( )Возвращает канонический путь абстрактного файла/каталога. Если в имени была использована относительная адресация, то она заменяется на каноническую: (C:\Work\JavaProects\bin\text.properties) longgetFreeSpace( )Возвращает количество нераспределенных байтов в разделе диска, где находится файл StringgetName( )Возвращает имя (без пути) файла/каталога StringgetParent( )Возвращает имя каталога, в котором находится файл/каталог или null, если имя файла/каталога не содержит пути к родителю FilegetParentFile( )Возвращает каталог, в котором находится файл или null, если имя файла/каталога не содержит пути к родителю

Пакет java.io. Класс File. Основные методы (3) StringgetPath( )Возвращает имя файла/каталога longgetTotalSpace( )Возвращает общую емкость диска, на котором расположен файл longgetUsableSpace( )Возвращает количество байтов, доступных данному экземпляру виртуальной машины Java на диске booleanisAbsolute( )Возвращает true, если файл задан абсолютным путем booleanisDirectory( )Возвращает true, если это каталог booleanisFile( )Возвращает true, если это файл (не каталог) booleanisHidden( )Возвращает true, если это скрытый файл longlastModified( )Возвращает время последней модификации файла longlength( )Возвращает размер файла в байтах String[ ]list( )Возвращает массив имен файлов, содержащихся в каталоге String[ ]list( FileNameFilter filter ) Возвращает массив имен файлов, содержащихся в каталоге, удовлетворяющих заданному фильтру File[ ]listFiles( )Возвращает массив абстрактных файлов, содержащихся в каталоге File[ ]listFiles( FileFilter filter ) Возвращает массив абстрактных файлов, содержащихся в каталоге и удовлетворяющих заданному фильтру File[ ]listFiles( FileNameFilter filter ) Возвращает массив абстрактных файлов, содержащихся в каталоге и удовлетворяющих заданному фильтру

Пакет java.io. Класс File. Основные методы (4) static File[ ] listRoots( )Возвращает массив файловых объектов, соответствующих возможным на данном компьютере корневым папкам. В Unix это папка "/", в Windows – корневые папки всех возможных дисков. booleanmkdir( )Создает каталог с заданным именем, если это возможно booleanmkdirs( )Создает каталог с заданным именем включая все необходимые, но не существующие родительские каталоги, если это возможно booleanrenameTo( File dest )Переименовывает файл на заданное абстрактное имя, если это возможно booleansetExecutable( boolean executable ) Устанавливает/сбрасывает возможность исполнения файла booleansetExecutable (boolean executable, boolean ownerOnly ) Устанавливает/сбрасывает возможность исполнения файла только/не только для его владельца booleansetLastModified( long time )Устанавливает время последней модификации файла booleansetReadable( boolean readable )Устанавливает/сбрасывает возможность чтения данных из файла booleansetReadable( boolean readable, boolean ownerOnly ) Устанавливает/сбрасывает возможность чтения данных из файла только/не только для его владельца

Пакет java.io. Класс File. Основные методы (5) booleansetReadOnly( )Устанавливает для файла режим "только чтение". booleansetWritable( boolean writable )Устанавливает или сбрасывает возможность записи данных в файл booleansetWritable( boolean writable, boolean ownerOnly ) То же самое, но либо только для собственника, либо для всех. PathtoPath( )Возвращает объект java.nio.file.Path, сконструированный из имени данного файла. StringtoString( )Возвращает строку полного имени файла. URItoURI( )Конструирует URI ( Uniform Resource Identifier ) данного файла.

Пакет 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

Пакет 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