Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

java / java-intro_part_2_ibm-developerworks

.pdf
Скачиваний:
56
Добавлен:
11.05.2015
Размер:
4.53 Mб
Скачать

02.09.13Введениев Java-программирование: Часть 2. Конструкцииреальныхприложений

IBM

Русский

Войти (или Регистрация)

Техническиематериалы ПробноеПО Сообщество

Введение в Java-программирование: Часть 2. Конструкции реальных приложений

Дополнительные возможности языка Java

Дж. Стивен Перри, главный консультант, Makoto Consulting Group, Inc.

Описание: В Части 1 этого руководства профессиональный Java™-программист Дж. Стивен Перри рассказал о синтаксисе языка Java и библиотеках, требуемых для написания простых Java-приложений. Часть 2 по-прежнему ориентирована на программистов, осваивающих разработку приложений Java, и вводит болеесложныеконструкции программирования, необходимыедля построения Java-приложений, рассчитанных на практическоеприменение. Еетематика охватывает обработку исключений, наследованиеи абстракции, регулярныевыражения, родовыетипы, операции ввода/вывода Java и Java-сериализацию.

Дата: 26.10.2011

Уровеньсложности: простой

Активность: 91195 просмотров

Средний показатель рейтинга (основанный на 55 голосов)

Регулярныевыражения

Регулярное выражение - это, по сути, модель, описывающая набор строк, составленных по одной и той жесхеме. Программистам, работающим с Perl, модель синтаксиса регулярных выражений (regex) языка Java должна показаться знакомой. Но тем, кто непривык к нему, этот синтаксис может показаться странным. В этом разделеописываются принципы работы с использованием регулярных выражений в программах на языкеJava.

API регулярных выражений

Следующий набор строк имеет нечто общее:

A string

A longer string

A much longer string

Заметьте, что каждая из этих строк начинается с буквы а и заканчивается словом string. API регулярных выражений Java (см. Ресурсы) помогает выявить такиеэлементы, увидеть в них общую модель и делать интересныевещи с использованием полученной информации.

API регулярных выражений состоит из трех основных классов, которыми вы будетепользоваться очень часто:

Patternописывает модель строки.

Matcherпроверяет строку на соответствиемодели.

PatternSyntaxExceptionуказывает на что-то неприемлемоев той модели, которую вы пытаетесь определить.

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

Синтаксис модели регулярных выражений

Модель регулярных выражений описывает структуру строк, которую выражениепытается обнаружить во входной строке. Регулярныевыражения в ней могут выглядеть немного странно. Однако как только вы освоитесинтаксис, их станет легче расшифровать. В таблице2 приведены некоторыенаиболеераспространенныеконструкции регулярных выражений, которые применяются для моделирования строк:

Таблица2. Распространенные конструкциирегулярных выражений

КонструкцияRegex

Что считаетсясовпадением

.

Любой символ

www.ibm.com/developerworks/ru/edu/j-introtojava2/section8.html

1/4

02.09.13Введениев Java-программирование: Часть 2. Конструкцииреальныхприложений

?Ноль (0) или одно (1)повторениепредшествующего

*Ноль (0) или болееповторений предшествующего

+Одно (1) или болееповторений предшествующего

[]

Диапазон символов или цифр

^Отрицаниепоследующего (то есть, "нечто-то")

\d

Любая цифра (иначе, [0-9])

\D

Любой нецифровой символ (иначе, [^0-9])

\s

Любой символ-разделитель (иначе, [\n\t\f\r])

\S

Любой символ, отличный от разделителей (иначе, [^\n\t\f\r])

\w

Любая буква или цифра (иначе, [A-Za-Z_0-9])

\W

Любой знак, отличный от буквы или цифры (иначе, [^\w])

Первыеконструкции называются квантификаторами, поскольку они определяют количество того, что им предшествует. Конструкции типа \d- это определенныеклассы символов. Любой символ, который неимеет специального значения в шаблоне, является буквальным и соответствует самому себе.

Поискпо модели

Вооружившись синтаксисом моделей из таблицы 2, можно выполнить простой пример, приведенный в листинге19, используя классы API регулярных выражений Java.

Листинг 19. Поискпо моделирегулярных выражений

Pattern pattern = Pattern.compile("a.*string"); Matcher matcher = pattern.matcher("a string"); boolean didMatch = matcher.matches(); Logger.getAnonymousLogger().info (didMatch); int patternStartIndex = matcher.start();

Logger.getAnonymousLogger().info (patternStartIndex); int patternEndIndex = matcher.end(); Logger.getAnonymousLogger().info (patternEndIndex);

Сначала создается класс Pattern. Это делается с помощью вызова статического метода compile()объекта Patternсо строковым литералом, который представляет собой модель, соответствиекоторой мы ищем. Этот литерал использует синтаксис модели регулярных выражений. Обычным языком модель, приведенную в данном примере, можно описать следующим образом:

Найти строку вида: буква а, за которой следуют ноль или более символов, а за ними - строка string.

Методы сравнения

Затем в листинге19 вызывается методmatcher()объекта Pattern. Этот вызов создает экземпляр Matcher. Matcherпроверяет переданную ему строку на соответствиемодели, использованной при создании объекта Pattern.

Каждая строка на языкеJava –это индексированная коллекция символов, начиная с 0-го и заканчивая символом с индексом "длина строки минус единица". Matcherанализирует строку, начиная с 0-го символа, в поисках совпадений с моделью. После завершения этого процесса Matcherсодержит информацию о найденных (или ненайденных) совпадениях в строкеввода.

Доступ к этой информации можно получить, вызывая различныеметоды Matcher:

matches()сообщает, совпадает ли с моделью вся входная последовательность;

start()указывает значениеиндекса в строке, с которого начинается совпадение; end()указывает значениеиндекса в строке, на котором совпадениезаканчивается, плюс единица.

Код, приведенный в листинге19, находит одно совпадение, с 0-й по 7-ю позицию. Следовательно, вызов matches() возвращает значениеtrue, вызов start()возвращает значение0, a вызов end()возвращает значение8.

lookingAt()иmatches()

Если бы в строкебыло большеэлементов, чем в модели поиска, вместо matches()можно было бы использовать метод lookingAt(). lookingAt()ищет совпадения подстрок с данной моделью. Например, рассмотрим следующую строку:

Here is a string with more than just the pattern.

Если искать по модели a.*stringи использовать lookingAt(), мы получим совпадение. Но методmatches()возвратил бы значениеfalse, так как в строкеесть нетолько то, что указано в модели.

www.ibm.com/developerworks/ru/edu/j-introtojava2/section8.html

2/4

02.09.13Введениев Java-программирование: Часть 2. Конструкцииреальныхприложений

Сложныемодели регулярных выражений

Простой поиск по классам регулярных выражений производить легко, но с API регулярных выражений можно делать и довольно сложныевещи.

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

MyWikiWord

Зная это, рассмотрим следующую строку:

Here is a WikiWord followed by AnotherWikiWord, then YetAnotherWikiWord.

В этой строкеможно искать вики-слова с помощью модели регулярных выражений:

[A-Z][a-z]*([A-Z][a-z]*)+

И вот коддля поиска wiki-слов:

String input = "Here is a WikiWord followed by AnotherWikiWord, then SomeWikiWord."; Pattern pattern = Pattern.compile("[A-Z][a-z]*([A-Z][a-z]*)+");

Matcher matcher = pattern.matcher(input); while (matcher.find()) {

Logger.getAnonymousLogger().info("Found this wiki word: " + matcher.group());

}

Выполнив этот код, вы должны увидеть на консоли три wiki-слова.

Заменастрок

Поиск совпадений полезен, но и послетого как совпадениенайдено со строками можно что-то делать. Одни строки можно заменять другими, как текст в текстовом редакторе. В Matcherесть несколько методов для замены элементов строк:

ReplaceAll()заменяет всесовпадения указанной строкой; replaceFirst()заменяет указанной строкой только первоесовпадение.

Использовать методы замены Matcherлегко:

String input = "Here is a WikiWord followed by AnotherWikiWord, then SomeWikiWord.";

Pattern pattern = Pattern.compile("[A-Z][a-z]*([A-Z][a-z]*)+");

Matcher matcher = pattern.matcher(input);

Logger.getAnonymousLogger().info("Before: " + input);

String result = matcher.replaceAll("replacement");

Logger.getAnonymousLogger().info("After: " + result);

Этот коднаходит wiki-слова, как и прежде. Обнаружив совпадение, Matcherзаменяет wiki-слово другим. Выполнив этот код, вы должны увидеть на консоли следующее:

Before: Here is WikiWord followed by AnotherWikiWord, then SomeWikiWord.

After: Here is replacement followed by replacement, then replacement.

При использовании replaceFirst()вы бы увидели:

Before: Here is a WikiWord followed by AnotherWikiWord, then SomeWikiWord.

After: Here is a replacement followed by AnotherWikiWord, then SomeWikiWord.

www.ibm.com/developerworks/ru/edu/j-introtojava2/section8.html

3/4

02.09.13Введениев Java-программирование: Часть 2. Конструкцииреальныхприложений

Сопоставлениегрупп и манипулированиеими

При поискесовпадений с моделью регулярного выражения можно получить информацию о найденном. Мы видели, как это делается с помощью методов start()и end()объекта Matcher. Но на совпадения можно ссылаться и с помощью групп.

В каждой модели, как правило, создаются группы –для этого отдельныееечасти заключаются в круглыескобки. Группы нумеруются слева направо, начиная с 1 (группа 0 соответствует всему совпадению). Код, приведенный в листинге20, заменяет каждоевики-слово строкой, которая "обертывает" слово:

Листинг 20. Совпадение групп

String input = "Here is a WikiWord followed by AnotherWikiWord, then SomeWikiWord.";

Pattern pattern = Pattern.compile("[A-Z][a-z]*([A-Z][a-z]*)+");

Matcher matcher = pattern.matcher(input);

Logger.getAnonymousLogger().info("Before: " + input);

String result = matcher.replaceAll("blah$0blah");

Logger.getAnonymousLogger().info("After: " + result);

Выполнив этот код, вы получитеследующий результат:

Before: Here is a WikiWord followed by AnotherWikiWord, then SomeWikiWord. After: Here is a blahWikiWordblah followed by blahAnotherWikiWordblah, then blahSomeWikiWordblah.

Другойподход ксовпадению групп

В листинге20 делается ссылка на всесовпадениепутем включения в строку замены $0. Любая часть заменяющей строки вида $intотносится к группе, указанной целым числом (так, $1указывает на группу 1 и т.п.). Другими словами, запись $0

эквивалентна matcher.group(0);.

Той жецели можно было бы достичь с помощью некоторых других методов. Вместо вызова replaceAll(), можно сделать следующее:

StringBuffer buffer = new StringBuffer(); while (matcher.find()) {

matcher.appendReplacement(buffer, "blah$0blah");

}

matcher.appendTail(buffer); Logger.getAnonymousLogger().info("After: " + buffer.toString());

И вы получитетот жерезультат:

Before: Here is a WikiWord followed by AnotherWikiWord, then SomeWikiWord. After: Here is a blahWikiWordblah followed by blahAnotherWikiWordblah, then blahSomeWikiWordblah.

8 из 14 | предыдущая | следующая

Печатьстраницы

Сделать этустраницуобщей

 

 

Помощь

 

Ленты

Конфиденциальность

Портал для студентов

Запрос на использование

Сообщить о нарушениях

Доступность (Английский)

Бизнес-партнеры IBM

материалов developerWorks

Условия использования

 

 

 

 

 

 

www.ibm.com/developerworks/ru/edu/j-introtojava2/section8.html

4/4

02.09.13Введениев Java-программирование: Часть 2. Конструкцииреальныхприложений

IBM

Русский

Войти (или Регистрация)

Техническиематериалы ПробноеПО Сообщество

Введение в Java-программирование: Часть 2. Конструкции реальных приложений

Дополнительные возможности языка Java

Дж. Стивен Перри, главный консультант, Makoto Consulting Group, Inc.

Описание: В Части 1 этого руководства профессиональный Java™-программист Дж. Стивен Перри рассказал о синтаксисе языка Java и библиотеках, требуемых для написания простых Java-приложений. Часть 2 по-прежнему ориентирована на программистов, осваивающих разработку приложений Java, и вводит болеесложныеконструкции программирования, необходимыедля построения Java-приложений, рассчитанных на практическоеприменение. Еетематика охватывает обработку исключений, наследованиеи абстракции, регулярныевыражения, родовыетипы, операции ввода/вывода Java и Java-сериализацию.

Дата: 26.10.2011

Уровеньсложности: простой

Активность: 91195 просмотров

Средний показатель рейтинга (основанный на 55 голосов)

Родовыетипы

Введениеродовых типов (generics) в JDK 5 стало гигантским шагом впереддля языка Java. Те, кто работал с шаблонами С++, обнаружат, что родовыетипы в языкеJava похожи на них, но это несовсем то жесамое. Если вы неработали с шаблонами С ++, нерасстраивайтесь: в этом разделесодержится общеевведениев родовыетипы языка Java.

Что такоеродовыетипы?

С выпуском JDK 5 язык Java вдруг обрел странный и захватывающий новый синтаксис. Некоторыезнакомыеклассы JDK были заменены на эквивалентныеродовыетипы.

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

Родовые типы вдействии

Чтобы увидеть, что дают родовыетипы, рассмотрим пример класса, который присутствовал в JDK в течениедлительного времени: java.util.ArrayList, который представляет собой списокобъектов, поддерживаемых массивом.

В листинге21 показано, как создается экземпляр java.util.ArrayList.

Листинг 21. Создание экземпляраArrayList

ArrayList arrayList = new ArrayList(); arrayList.add("A String"); arrayList.add(new Integer(10)); arrayList.add("Another String");

// Пока все хорошо

Как видите, ArrayListнеоднороден: он содержит два типа Stringи один тип Integer. До JDK 5 в языкеJava небыло ничего, что ограничивало бы такоеповедение, и это приводило к многочисленным ошибкам программирования. Например, в листинге21 пока всевыглядит хорошо. Но как насчет доступа к элементам ArrayList, который пытается получить код, приведенный в листинге22?

Листинг 22. Попыткаполучитьдоступ кэлементам вArrayList

ArrayList arrayList = new ArrayList();

www.ibm.com/developerworks/ru/edu/j-introtojava2/section9.html

1/5

02.09.13Введениев Java-программирование: Часть 2. Конструкцииреальныхприложений

arrayList.add("A String"); arrayList.add(new Integer(10)); arrayList.add("Another String"); // Пока все хорошо

*processArrayList(arrayList);

*// В некоторой более поздней части кода...

private void processArrayList(ArrayList theList) { for (int aa = 0; aa < theList.size(); aa++) {

// В какой-то момент это не удастся...

String s = (String)theList.get(aa);

}

}

Незная, что находится в ArrayList, вы либо должны проверить элемент, к которому обращаетесь, чтобы понять, можно ли управлять его типом, либо столкнетесь с возможностью исключения ClassCastException.

С помощью родовых типов можно указать тип элемента, который находится в ArrayList. В листинге23 показано, как это сделать.

Listing 23. A second attempt,using generics

ArrayList<String> arrayList = new ArrayList<String>(); arrayList.add("A String");

arrayList.add(new Integer(10));// ошибка компиляции!! arrayList.add("Another String");

// Пока все хорошо

*processArrayList(arrayList);

*// В некоторой более поздней части кода...

private void processArrayList(ArrayList<String> theList) { for (int aa = 0; aa < theList.size(); aa++) {

// Приведение не требуется...

String s = theList.get(aa);

}

}

Итерацияс использованием родовых типов

Родовыетипы дополнили язык Java специальным синтаксисом для работы с такими объектами, как списки, которыеобычно перебирают элемент за элементом. Например, если нужно перебрать ArrayList, кодиз листинга 23 можно переписать следующим образом:

private void processArrayList(ArrayList<String> theList) { for (String s : theList) {

String s = theList.get(aa);

}

}

Этот синтаксис работает для объектов любого типа, которыеитерабельны(то есть реализуют интерфейсIterable).

Параметризованныеклассы

Параметризованныеклассы очень удобны для работы с коллекциями, и мы будем рассматривать их именно с этой точки зрения. Рассмотрим (реальный) интерфейс List. Он представляет собой упорядоченную коллекцию объектов. В наиболее распространенных вариантах использования в Listдобавляют элементы, а затем обращаются к ним по индексу или с помощью перебора элементов List.

Если предполагается параметризация класса, нужно посмотреть, применимы ли следующиекритерии:

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

Если оба эти критерия удовлетворены, то очевидно, что коллекция отвечает следующим требованиям:

"нечто" есть класс в составеколлекции;

операции (add, remove, size, clearи т.п.) в значительной степени одинаковы, независимо от объекта, составляющего коллекцию.

www.ibm.com/developerworks/ru/edu/j-introtojava2/section9.html

2/5

02.09.13Введениев Java-программирование: Часть 2. Конструкцииреальныхприложений

Параметризованныйсписок

Коддля создания спискав синтаксисеродовых типов выглядит следующим образом:

List<E> listReference = new concreteListClass<E>();

Буква E, которая означает Element, и есть то "нечто", о чем упоминалось выше. concreteListClass- это инициализированный класс JDK. JDK включает в себя несколько реализаций List<E>, но мы будем использовать ArrayList<E>. Другой способ увидеть обсуждаемый родовой класс –это Class<T>, гдеТозначает Type(тип). Как правило, Eв кодеJava означает ссылку на ту или иную коллекцию. А T- на параметризованный класс.

Таким образом, чтобы создать ArrayList , скажем, из элементов java.lang.Integer, нужно сделать следующее:

List<Integer> listOfIntegers = new ArrayList<Integer>();

SimpleList: параметризованныйкласс

Теперь предположим, что вам нужно создать свой собственный класс SimpleListс тремя методами:

add()добавляет элемент в конец списка SimpleList;

size()возвращает текущееколичество элементов SimpleList; clear()полностью очищает содержимоеSimpleList.

В листинге24 показан синтаксис для параметризации SimpleList.

Листинг 24. ПараметризацияSimpleList

package com.makotogroup.intro; import java.util.ArrayList; import java.util.List;

public class SimpleList<E> { private List<E> backingStore; public SimpleList() {

backingStore = new ArrayList<E>();

}

public E add(E e) {

if (backingStore.add(e)) return e;

else

return null;

}

public int size() {

return backingStore.size();

}

public void clear() { backingStore.clear();

}

}

SimpleListможно параметризовать с помощью любого подкласса Object. Чтобы создать и использовать список SimpleList, скажем, объектов java.math.BigDecimal, нужно сделать следующее:

public static void main(String[] args) { SimpleList<BigDecimal> sl = new SimpleList<BigDecimal>(); sl.add(BigDecimal.ONE);

log.info("SimpleList size is : " + sl.size()); sl.add(BigDecimal.ZERO);

log.info("SimpleList size is : " + sl.size()); sl.clear();

log.info("SimpleList size is : " + sl.size());

}

Вы получитетакой результат:

May 5, 2010 6:28:58 PM com.makotogroup.intro.Application main

INFO: SimpleList size is : 1

May 5, 2010 6:28:58 PM com.makotogroup.intro.Application main

INFO: SimpleList size is : 2

www.ibm.com/developerworks/ru/edu/j-introtojava2/section9.html

3/5

02.09.13Введениев Java-программирование: Часть 2. Конструкцииреальныхприложений

May 5, 2010 6:28:58 PM com.makotogroup.intro.Application main

INFO: SimpleList size is : 0

Перечисляемыетипы

В JDK 5 добавился новый тип данных языка Java, enum. Непутайтеего с java.util.Enumeration. Перечисляемый тип enum- это множество постоянных объектов, связанных с определенным понятием, каждый из которых представляет собой некоторое постоянноезначениеиз этого множества. До ввода перечисляемых типовв язык Java нужно было определять множество постоянных значений для данного понятия (например, пола (Gender)) следующим образом:

public class Person {

public static final String MALE = "male"; public static final String FEMALE = "female";

}

Для ссылки на это постоянноезначениенужно было написать некоторый код, например:

public void myMethod() { //. . .

String genderMale = Person.MALE; //. . .

}

Определение констант типаenum

Использованиетипа enumделает процесс определения констант гораздо болееформальным, а такжеболеемощным. Вот определениеenumдля пола:

public enum Gender { MALE,

FEMALE

}

Это всего лишь маленькая толика того, что можно делать с перечисляемыми типами. На самом деле, перечисляемые типы очень похожи на классы, так что они могут иметь конструкторы, атрибуты и методы:

package com.makotogroup.intro;

public enum Gender { MALE("male"), FEMALE("female");

private String displayName;

private Gender(String displayName) { this.displayName = displayName;

}

public String getDisplayName() { return this.displayName;

}

}

Одно из различий между классом и перечисляемым типом состоит в том, что конструктор перечисляемого типа должен быть объявлен как privateи неможет расширять другиеперечисляемыетипы (или наследовать их свойства). Тем неменее, enum можетреализовать интерфейс.

Перечисляемыйтип реализует интерфейс

Предположим, мы определили интерфейс Displayable:

package com.makotogroup.intro; public interface Displayable {

public String getDisplayName();

}

www.ibm.com/developerworks/ru/edu/j-introtojava2/section9.html

4/5

02.09.13Введениев Java-программирование: Часть 2. Конструкцииреальныхприложений

Наш перечисляемый тип Genderможет реализовать этот интерфейс (как и любой другой enum, необходимый для создания наглядного отображаемого имени), следующим образом:

package com.makotogroup.intro;

public enum Gender implements Displayable { MALE("male"),

FEMALE("female");

private String displayName;

private Gender(String displayName) { this.displayName = displayName;

}

@Override

public String getDisplayName() { return this.displayName;

}

}

Подробнеео родовых типах см. в разделеРесурсы.

9 из 14 | предыдущая | следующая

Печатьстраницы

Сделать этустраницуобщей

 

 

Помощь

 

Ленты

Конфиденциальность

Портал для студентов

Запрос на использование

Сообщить о нарушениях

Доступность (Английский)

Бизнес-партнеры IBM

материалов developerWorks

Условия использования

 

 

 

 

 

 

 

 

 

 

 

www.ibm.com/developerworks/ru/edu/j-introtojava2/section9.html

5/5

02.09.13Введениев Java-программирование: Часть 2. Конструкцииреальныхприложений

IBM

Русский

Войти (или Регистрация)

Техническиематериалы ПробноеПО Сообщество

Введение в Java-программирование: Часть 2. Конструкции реальных приложений

Дополнительные возможности языка Java

Дж. Стивен Перри, главный консультант, Makoto Consulting Group, Inc.

Описание: В Части 1 этого руководства профессиональный Java™-программист Дж. Стивен Перри рассказал о синтаксисе языка Java и библиотеках, требуемых для написания простых Java-приложений. Часть 2 по-прежнему ориентирована на программистов, осваивающих разработку приложений Java, и вводит болеесложныеконструкции программирования, необходимыедля построения Java-приложений, рассчитанных на практическоеприменение. Еетематика охватывает обработку исключений, наследованиеи абстракции, регулярныевыражения, родовыетипы, операции ввода/вывода Java и Java-сериализацию.

Дата: 26.10.2011

Уровень сложности: простой

Активность: 91195 просмотров

Средний показатель рейтинга (основанный на 55 голосов)

Операции ввода/вывода

В этом разделепредставлен обзор пакета java.io. Вы научитесь использовать некоторыеинструменты для сбора данных из различных источников и манипулирования ими.

Работа с внешними данными

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

Файлы

Из всех источников данных, доступных для Java-приложений, файлы ― наиболеераспространенный и часто наиболее удобный. Если Java-приложениедолжно прочесть файл, нужно использовать потоки (streams), которыепреобразуют входящиебайты в типы языка Java.

java.io.File- это класс, который определяет ресурс файловой системы и представляет этот ресурс абстрактным образом. Создать объект Fileочень просто:

File f = new File("temp.txt");

File f2 = new File("/home/steve/testFile.txt");

Конструктор Fileпринимает имя создаваемого файла. Первый вызов создает файл с именем temp.txtв данном каталоге. Второй - файл в определенном местемоей Linux-системы. Конструктору Fileможно передавать любую строку, если это допустимоеимя файла для вашей ОС, независимо от того, существует ли файл, на который оно указывает.

Следующий кодопределяет, существует ли вновь созданный объект File.

File f2 = new File("/home/steve/testFile.txt"); if (f2.exists()) {

//Файл существует. Обработать его...

}else {

//Файл не существует. Создать его...

f2.createNewFile();

}

www.ibm.com/developerworks/ru/edu/j-introtojava2/section10.html

1/4

Соседние файлы в папке java