Презентация по Программированию. Книга Программирование на Java для начинающих
Скачать 4.47 Mb.
|
File в действительности файл не создается, а происходит лишь представле- ние конкретного элемента файловой системы. Как только объект File, представляющий конкретный файл системы, создан, можно вызывать его методы для работы с файлом. Наиболее используемые и полезные методы объекта File с кратким их описани- ем перечислены в таблице ниже. Метод Возвращает exists() true, если файл существует, false — в про- тивном случае getName() имя файла в виде строки length() размер файла в байтах (тип long ) createNewFile() true, если удалось создать новый файл delete() true в случае успешного удаления файла renameTo(File) true в случае успешного переименования файла list() массив имен файлов или каталогов (стро- кового типа) На заметку Имя файла, указанного в качестве аргумента для конструктора, должно быть заключено в кавычки. 119 1. Создайте новую программу, которая импортирует функции всех классов пакета java.io. import java.io.* ; 2. Добавьте класс с именем ListFiles, содержащий стандартный ме- тод main. class ListFiles { public static void main( String[] args ) { } } 3. Внутри фигурных скобок главного метода добавьте оператор, соз- дающий объект File для каталога с именем data. File dir = new File( "data" ) ; 4. Добавьте оператор if для вывода имен всех файлов в данном ката- логе либо вывода сообщения в случае, если каталог пустой. if ( dir.exists() ) { String[] files = dir.list() ; System.out.println( files.length + " файлов найдено..." ) ; for ( int i = 0 ; i < files.length ; i++ ) { System.out.println( files[i] ) ; } } else { System.out.println( "Каталог не найден." ) ; 5. Сохраните программу под именем ListFiles.java внутри каталога data, содержащего несколько файлов, затем скомпилируйте и за- пустите; вы увидите перечисленные имена файлов в качестве вы- вода. JAVA ListFiles.java 7. Импор тирование ф ункций 120 Чтение консольного ввода Пакет java.io позволяет в программах на языке Java читать дан- ные, вводимые пользователем в командной строке. Подобно объек- ту System.out, отправляющему вывод в командную строку, объект System.in можно использовать для чтения из командной строки при помощи объекта InputStreamReader. Вводимые данные читаются по- байтно, затем конвертируются в целочисленные значения, представ- ляющие значения символов в формате Unicode. Для того чтобы прочитать целую строку вводимого текста, метод readLine() объекта BufferedReader читает символы, декодированные при помощи объекта InputStreamReader. Данный метод следует вызы- вать внутри блока операторов try catch, чтобы перехватывать исклю- чения IOException (исключения, вызванные вводом-выводом). Обычно метод readLine() заносит введенные данные в строковую пе- ременную для следующей обработки в программе. 1. Создайте новую программу, которая импортирует функциональ- ность всех классов. java.io import java.io.* ; 2. Добавьте класс с именем ReadString, содержащий стандартный ме- тод main. class ReadString { public static void main( String[] args ) { } } 3. Внутри фигурных скобок главного метода добавьте оператор для вывода сообщения, предлагающего пользователю ввести данные. System.out.print( "Введите название данной книги: " ) ; 4. Добавьте оператор, создающий объект InputStreamReader, позво- ляющий читать вводимые с командной строки данные. InputStreamReader isr = new InputStreamReader( System.in ) ; 5. Создайте объект BufferedReader для чтения декодированного ввода . BufferedReader buffer = new BufferedReader( isr ) ; JAVA ReadString.java 121 6. Объявите и проинициализируйте пустую строковую переменную, в которой будет сохраняться ввод. String input = "" ; 7. Добавьте блок операторов try catch, в котором будет происходить чтение данных, вводимых из командной строки, и сохранение их в переменной. try { input = buffer.readLine() ; buffer.close() ; } catch ( IOException e ) { System.out.println( "Произошла ошибка ввода" ) ; } 8. Выведите сообщение, включающее сохраненное значение ввода. System.out.println( "\nСпасибо, вы читаете " + input ) ; 9. Сохраните программу под именем ReadString.java, затем скомпили- руйте и запустите. 10. Введите запрашиваемый текст, нажмите клавишу Enter, и вы уви- дите выводимое сообщение, содержащее этот текст. Совет Хорошей практикой явля- ется вызов метода close() объекта BufferedReader, если он больше не нужен. 7. Импор тирование ф ункций 122 Чтение файлов Пакет java.io содержит класс с именем FileReader, который специ- ально предназначен для чтения текстовых файлов. Он является под- классом класса InputStreamReader, который используется для чтения консольного ввода и преобразует поток байтов в целые числа, пред- ставляющие символы в формате ЮНИКОД. Объект FileReader создается при помощи ключевого слова new, а так- же имени файла, из которого нужно читать, в качестве аргумента. Ар- гумент может включать полный путь к файлу за пределами каталога, где расположена программа. Для эффективного чтения текста строка за строкой используется метод readLine() объекта BufferedReader, который читает символы, декоди- рованные объектом FileReader. Данный метод следует вызывать внутри блока try catch для перехвата возможных исключений ввода-вывода. Для того чтобы прочитать все строки текстового файла, в цикле вы- зывается метод readLine(). В конце файла он возвратит значение null, которое можно использовать для выхода из цикла. 1. Откройте простой текстовый редактор, скажем, Блокнот (Notepad), и введите несколько строк текста, например знаменитую фразу Оскара Уайльда из произведения «Баллада Редингской тюрьмы». 2. Сохраните текстовый файл под именем oscar.txt, затем создайте но- вую программу, которая импортирует функции всех классов паке- та java.io. import java.io.* ; 3. Добавьте класс с именем ReadFile, содержащий стандартный ме- тод main. class ReadFile { public static void main( String[] args ) { } } 123 4. Внутри фигурных скобок главного метода добавьте блок операто- ров try catch. try { } catch ( IOException e ) { System.out.println( "Произошла ошибка чтения" ) ; } 5. Внутри фигурных скобок блока try добавьте оператор для созда- ния объекта FileReader. FileReader file = new FileReader( "oscar.txt" ) ; 6. Создайте объект BufferedReader для чтения файла. BufferedReader buffer = new BufferedReader( file ) ; 7. Объявите и проинициализируйте пустую строковую переменную для хранения строки текста. String line = "" ; 8. Добавьте цикл для чтения в переменную содержимого текстового файла, а также для вывода всех строк текста. while ( ( line = buffer.readLine() ) != null ) { System.out.println( line ) ; } 9. Не забудьте закрыть объект BufferedReader, поскольку он больше не нужен. buffer.close() ; 10. Сохраните программу под именем ReadFile.java рядом с текстовым файлом, затем скомпилируйте и запустите. На заметку Имя текстового файла, ука- занного в качестве аргумен- та для FileReader, должно быть заключено в кавычки. 7. Импор тирование ф ункций 124 Запись файлов В пакете java.io классы FileReader и BufferedReader, использующие- ся для чтения текстовых файлов, имеют аналоги с именами FileWriter и BufferedWriter, которые можно использовать для записи текстовых файлов. Объект FileWriter создается с использованием ключевого слова new и принимает имя файла, в который нужно производить запись, в ка- честве аргумента. Аргумент может включать полный путь к файлу за пределами каталога, в котором расположена программа. Объект BufferedWriter создается с использованием ключевого слова new и принимает в качестве аргумента имя объекта FileWriter. После этого при помощи метода write объекта BufferedWriter можно запи- сывать текст, в котором строки разделяются вызовом метода newLine(). Эти методы следует располагать внутри блока операторов try catch для перехвата возможных исключений ввода-вывода. Если файл с указанным именем уже существует, то метод write() ста- нет перезаписывать содержимое файла, в противном случае будет соз- даваться новый файл с этим именем, в который станет записываться содержимое. 1. Создайте новую программу, которая импортирует функции всех классов пакета java.io. import java.io.* ; 2. Добавьте класс с именем WriteFile, содержащий стандартный ме- тод main. class WriteFile { public static void main ( String[] args ) { } } 3. Внутри фигурных скобок главного метода добавьте блок операто- ров try catch. try { } catch ( IOException e ) { System.out.println( "Произошла ошибка записи" ) ; } JAVA WriteFile.java 125 4. Внутри фигурных скобок блока try добавьте оператор для созда- ния объекта FileWriter для текстового файла с именем tam.txt. FileWriter file = new FileWriter( "tam.txt" ) ; 5. Создайте объект BufferedWriter для записи файла. BufferedWriter buffer = new BufferedWriter( file ) ; 6. Добавьте операторы для записи строк текста, а также символов новой строки в текстовый файл. Например, перевод произведения «Тэм О’Шентер» Роберта Бернса. buffer.write( "Дул ветер из последних сил," ) ; buffer.newLine() ; buffer.write( "И град хлестал, и ливень лил," ); buffer.newLine() ; buffer.write( "И вспышки молний тьма глотала," ) ; buffer.newLine() ; buffer.write( "И небо долго грохотало..." ) ; buffer.newLine() ; buffer.write( "В такую ночь, как эта ночь," ) ; buffer.newLine() ; buffer.write( "Сам дьявол погулять не прочь." ) ; 7. Не забудьте закрыть объект BufferedWriter, поскольку он больше не нужен. buffer.close() ; 8. Сохраните программу под именем WriteFile.java, затем скомпили- руйте и запустите; она запишет текстовый файл в тот же каталог, где находится программа. Совет Вместо того чтобы переза- писывать текст в файле при помощи метода write(), вы можете использовать метод append() объекта BufferedWriter для добавле- ния текста в файл. 7. Импор тирование ф ункций 126 Сортировка элементов массива В Java содержится пакет с именем java.util, который предлагает по- лезные утилиты для работы с набором данных. Данный пакет можно сделать доступным любой программе, включив в самое начало файла .java оператор import. Например, используя шаблон *, можно импорти- ровать все классы данного пакета: import java.util.* ;. В пакете java.util содержится класс с именем Arrays, предлагающий методы, которые можно использовать для работы с массивами. Данная функциональность может быть доступна в программах, если импор- тировать все классы пакета java.util, либо, если программа требует только одного класса, указать в операторе import определенное имя класса. Например, для импорта класса Arrays запишем import java. util.Arrays ; В классе Arrays содержится метод sort(), который может упорядочи- вать элементы массива либо в алфавитном порядке, либо численно. 1. Создайте новую программу, импортирующую функциональность класса java.util.Arrays. import java.util.Arrays ; 2. Добавьте класс с именем Sort, содержащий стандартный метод main class Sort { public static void main( String[] args ) { } } 3. После метода main добавьте метод для отображения содержимого всех элементов переданного строкового массива. public static void display( String[] elems ) { System.out.println( "\nСтроковый Массив:" ) ; for ( int i = 0 ; i < elems.length ; i++ ) System.out.println( "Элемент "+i+" — "+elems[i] ) ; } 4. Добавьте перегруженную версию метода display() для отображе- ния содержимого всех элементов переданного целочисленного мас- сива. JAVA Sort.java Совет Более подробно о перегруз- ке методов см. в главе 6. 127 public static void display( int[] elems ) { System.out.println( "\nЦелочисленный Массив:" ) ; for ( int i = 0 ; i < elems.length ; i++ ) System.out.println( "Элемент "+i+" — "+elems[i] ) ; } 5. Внутри фигурных скобок главного метода объявите и проинициа- лизируйте строковый и целочисленный массивы. String[] names = { "Майк" , "Дэйв" , "Энди" } ; int[] nums = { 200 , 300 , 100 } ; 6. Выведите содержимое всех элементов каждого массива. display( names ) ; display( nums ) ; 7. Отсортируйте содержимое элементов обоих массивов. Arrays.sort( names ) ; Arrays.sort( nums ) ; 8. Выведите содержимое всех элементов каждого массива еще раз. display( names ) ; display( nums ) ; 9. Сохраните программу под именем Sort.java, затем скомпилируйте и запустите. На заметку В данном примере в каждом из циклов for выполняет- ся только один оператор, поэтому фигурных скобок не требуется, но для ясности иногда можно их добавлять. 7. Импор тирование ф ункций 128 Создание списочных массивов В пакете java.util содержится класс с именем ArrayList, который хра- нит данные в упорядоченном «наборе», являющемся последовательно- стью с изменяемым размером. Этот класс делается доступным в про- грамме при помощи команды импорта: import java.util.ArrayList;. Список может содержать повторяющиеся элементы, и объект ArrayList имеет полезные методы, позволяющие работать с элементами массива, используя их порядковые номера (индексы). Например, вызов get(0) позволяет получить значение, хранящееся в первом элементе, в то вре- мя как remove(1) удаляет второй элемент списка. При помощи метода списка set() можно изменять значения элемен- тов, указав в качестве аргументов этому методу порядковый номер и новое значение. Метод add() позволяет в определенное место списка добавлять элементы, указав в качестве аргументов порядковый номер и значение. При этом список расширяется, в него включаются допол- нительные элементы, а порядковые номера сдвигаются. Объект ArrayList создается при помощи ключевого слова new, но, как и другие наборы Java, при создании нужно указывать тип элемента, в котором будет содержаться список. Обычно списки содержат стро- ковые элементы, поэтому объект ArrayList должен иметь суффикс Такие наборы, как ArrayList содержат метод forEach(), с помощью ко- торого можно обходить элементы списка. Элементы списка можно также обойти при помощи «лямбда- выражения», которое можно указать методу forEach() в качестве аргу- мента. Лямбда-выражения — это простые и короткие анонимные ме- тоды, которые определяются в том же месте, где и выполняются. Они начинаются со скобок, содержащих аргументы, затем ставится после- довательность символов ->, после которой идет блок операторов: ( аргумент/-ы ) -> { оператор/-ы } Тип данных аргументов может быть объявлен либо явно, либо может подразумеваться из контекста — (String x) может быть заменено на (x) . Кроме того, фигурные скобки могут быть опущены, если блок опе- раторов лямбда-выражений содержит только один оператор. При помощи метода forEach() значение текущего элемента на каждой итерации может быть передано лямбда-выражению в качестве его ар- гумента, а затем отображено в выводе при помощи его оператора. Совет Найти количество элемен- тов, содержащихся в списке, вы можете, вызвав метод size(). Новинка Лямбда-выражения появи- лись в версии Java 8 для краткой записи анонимных методов. 129 1. Создайте новую программу, которая импортирует все методы клас- са java.util.ArrayList. import java.util.ArrayList ; 2. Добавьте класс с именем Lists, содержащий стандартный метод main class Lists { public static void main( String[] args ) { } } 3. Внутри фигурных скобок главного метода добавьте оператор для создания строкового списочного массива с именем list. ArrayList 4. Далее добавьте операторы, заполняющие элементы списка строко- выми значениями, а затем выведите весь список. |