Successfully reported this slideshow.
Your SlideShare is downloading. ×

Урок 21. Потоки ввода/вывода в языке Java

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 73 Ad

Урок 21. Потоки ввода/вывода в языке Java

Download to read offline

Потоки данных.
Класс File.
Классы байтовых потоков – InputStream, OutputStream, FileInputStream, FileOutputStream.
Классы символьных потоков – Reader, Writer, FileWriter, FileReader, BufferedWriter, BufferedReader, PrintWriter.
Упаковка (wrapping) классов.
Предопределенные потоки ввода/вывода.
Класс Scanner.
Лекции, задания, видео, тесты и вопросы на:
https://www.examclouds.com/ru/java/java-core-russian/potoki-vvoda-vivoda
Подписывайтесь на страницу:
https://www.facebook.com/Examclouds
Подписывайтесь на канал
https://www.youtube.com/c/tatyanamilkina

Потоки данных.
Класс File.
Классы байтовых потоков – InputStream, OutputStream, FileInputStream, FileOutputStream.
Классы символьных потоков – Reader, Writer, FileWriter, FileReader, BufferedWriter, BufferedReader, PrintWriter.
Упаковка (wrapping) классов.
Предопределенные потоки ввода/вывода.
Класс Scanner.
Лекции, задания, видео, тесты и вопросы на:
https://www.examclouds.com/ru/java/java-core-russian/potoki-vvoda-vivoda
Подписывайтесь на страницу:
https://www.facebook.com/Examclouds
Подписывайтесь на канал
https://www.youtube.com/c/tatyanamilkina

Advertisement
Advertisement

More Related Content

Slideshows for you (16)

Similar to Урок 21. Потоки ввода/вывода в языке Java (20)

Advertisement

Recently uploaded (15)

Урок 21. Потоки ввода/вывода в языке Java

  1. 1. 1. Потоки данных 2. Класс File 3. Классы байтовых потоков – InputStream, OutputStream, FileInputStream, FileOutputStream 4. Классы символьных потоков – Reader, Writer, FileWriter, FileReader, BufferedWriter, BufferedReader, PrintWriter 5. Упаковка (wrapping) классов 6. Предопределенные потоки ввода-вывода 7. Класс Scanner www.examclouds.com
  2. 2. Потоки данных  В Java для описания работы по вводу/выводу используется специальное понятие – поток данных (stream).  Поток данных связан с некоторым источником или приемником данных, способных получать или предоставлять информацию.  Соответственно, потоки делятся на входные - читающие данные, и на выходные - передающие (записывающие) данные. www.examclouds.com
  3. 3. Пакет java.io  В Java потоки ввода-вывода реализуются в пределах иерархии классов, определенных в пакете jаvа.io. www.examclouds.com
  4. 4. Потоки данных  Потоки данных — это упорядоченные последовательности данных, которым соответствует определенный источник (source) (для потоков ввода) или получатель (destination) (для потоков вывода).  Классы ввода-вывода Java исключают необходимость вникать в особенности низкоуровневой организации операционных систем и предоставляют доступ к системным ресурсам посредством методов работы с файлами и иных инструментов. www.examclouds.com
  5. 5. Потоки данных  Все потоки ввода-вывода ведут себя одинаково, несмотря на отличия в конкретных физических устройствах, с которыми они связаны.  Одни и те же классы и методы ввода-вывода применимы к разнотипным устройствам.  Абстракция потока ввода может охватывать разные типы ввода: из файла на диске, клавиатуры или сетевого соединения. www.examclouds.com
  6. 6. Класс File  В отличие от большинства классов ввода/вывода, класс File работает не с потоками, а непосредственно с файлами.  Данный класс позволяет получить информацию о файле: права доступа, время и дата создания, путь к каталогу. А также осуществлять навигацию по иерархиям подкаталогов. www.examclouds.com
  7. 7. Пример получения информации о файле public class FileDemo { public static void main(String[] args) { File file = new File("src/io"); System.out.println("Имя файла: " + file.getName()); System.out.println("Путь: " + file.getPath()); System.out.println("Абсолютный путь: " + file.getAbsolutePath() System.out.println("Родительский каталог: " + file.getParent()) System.out.println(file.exists() ? "Файл/каталог существует." : System.out.println(file.canWrite() ? "Файл/каталог доступен для : "Файл/каталог не доступен для редактирования."); System.out.println(file.canRead() ? "Файл/каталог доступен для System.out.println((file.isDirectory() ? "Каталог." : "Не катал System.out.println(file.isFile() ? "Файл." : "Не файл."); System.out.println(file.isAbsolute() ? "Абсолютный путь." : "Не System.out.println("Дата последнего редактирования: " + file.la System.out.println("Размер: " + file.length() + " байт."); } } www.examclouds.com
  8. 8. Конструкторы класса File 1. File(String path) - указывается путь к файлу 2. File(File dir, String name) - указывается объекта класса File (каталог) и имя файла 3. File(String dirPath, Sring name) - указывается путь к файлу и имя файла 4. File(URI uri) - указывается объекта URI, описывающий файл. www.examclouds.com
  9. 9. Методы класса File Метод Описание getAbsolutePath() абсолютный путь файла, начиная с корня системы. canRead() доступно для чтения canWrite() доступно для записи exists() файл существует или нет getName() возвращает имя файла getParent() возвращает имя родительского каталога getPath() путь lastModified() дата последнего изменения isFile() объект является файлом, а не каталогом isDirectory объект является каталогом www.examclouds.com
  10. 10. Методы класса File Метод Описание isAbsolute() возвращает true, если файл имеет абсолютный путь renameTo(File newPath) переименовывает файл. В параметре указывается имя нового имени файла. Если переименование прошло неудачно, то возвращается false delete() удаляет файл. Также можно удалить пустой каталог www.examclouds.com
  11. 11. Каталог  Каталог – это тоже объект класса File, который содержит список других файлов и каталогов. После создания объекта класса File, являющего каталогом, его метод isDirectory() вернёт значение true.  mkdir() - для создания каталога можно использовать метод mkdir(), который вернёт true в успешном случае. Если указанный путь уже существует или каталог нельзя создать из-за отсутствия полного пути к нему, то вернётся false.  mkdirs() - создаёт сам каталог, так и всех его родителей. www.examclouds.com
  12. 12. Содержимое каталога  String[] list() – если вы хотите получить содержимое каталога, то можно вызвать метод list() без аргументов. Вам вернётся полный список (массив) имён файлов и каталогов, содержащихся в данном каталоге.  Files[] listFiles() - похожий метод, который возвращает массив файлов (объектов, а не их имён). String[] www.examclouds.com
  13. 13. Пример получения содержимого каталога public class DirList { public static void main(String[] args) { String catalogName = "src"; File catalog = new File(catalogName); if (catalog.isDirectory()) { System.out.println("Папка " + catalogName); String[] list = catalog.list(); if (list != null) { for (String fileName : list) { File file = new File(catalogName + "/" + fileName); if (file.isDirectory()) { System.out.printf("t%s каталог%n", fileName); } else { System.out.printf("t%s файл%n", fileName); } } } } else { System.out.println(catalogName + " не является каталогом"); } } www.examclouds.com
  14. 14. Типы потоков данных В JAVA существует 2 типа потоков данных:  Символьные потоки (text-streams, последовательности 16-битовых символов Unicode), содержащие символы.  Байтовые потоки (binary-streams), содержащие 8-ми битную информацию. www.examclouds.com
  15. 15. Направления потоков Классы разделяются также по направлению потоков:  Потоки ввод (input)  Потоки вывода (output) www.examclouds.com
  16. 16. Основные абстрактные классы потоков данных www.examclouds.com
  17. 17. Общая схема работы с потоками в Java 1. Создать потоковый объект и ассоциировать его с файлом на диске. 2. Пока есть информация, читать/писать очередные данные в/из потока . 3. Закрыть поток. www.examclouds.com
  18. 18. Классы байтовых потоков www.examclouds.com
  19. 19. Класс InputStream  Класс InputStream – это абстрактный класс.  Все байтовые потоки чтения наследуются от класса InputStream. www.examclouds.com
  20. 20. Методы класса InputStream Существует 3 основных read-метода:  int read() - возвращает целочисленное представление следующего доступного байта в потоке. При достижении конца файла возвращается значение -1.  int read(byte[] buffer) - пытается прочесть максимум buffer.length байт из входного потока в массив buffer. Возвращает количество байт, в действительности прочитанных из потока. По достижении конца файла возвращает значение -1.  int read(byte[] buffer, int offset, int length) - пытается прочесть максимум length байт, расположив их в массиве buffer, начиная с элемента offset. Возвращает количество реально прочитанных байт. По достижении конца файла возвращает -1.  Методы будут блокированы, пока доступные данные не будут прочитаны.  Выбрасывают исключение IOException, если происходит ошибка ввода- вывода. www.examclouds.com
  21. 21. Методы класса InputStream  int available() - возвращает количество байтов ввода, доступные в данный момент для чтения.  close() - закрывает источник ввода. Следующие попытки чтения передадут исключение IOException.  long skip(long byteCount) - пропускает byteCount байт ввода, возвращая количество проигнорированных байтов. www.examclouds.com
  22. 22. Класс OutputStream  Все байтовые потоки записи наследуются от абстрактного класса OutputStream. www.examclouds.com
  23. 23. Методы класса OutputStream Существуют 3 основных write-метода: ▪ void write(int data) - записывает один байт в выходной поток. Аргумент этого метода имеет тип int, что позволяет вызывать write, передавая ему выражение, при этом не нужно выполнять приведение его типа к byte. ▪ void write(byte[] buffer) - записывает в выходной поток весь указанный массив байт. ▪ void write(byte[] buffer, int offset, int length) - записывает в поток часть массива - length байт, начиная с элемента buffer[offset]. ▪ Методы выбрасывают исключение IOException, если происходит ошибка ввода-вывода. www.examclouds.com
  24. 24. Методы класса OutputStream ▪ flush() - очищает любые выходные буферы, завершая операцию вывода. ▪ close() - закрывает выходной поток. Последующие попытки записи в этот поток будут возбуждать IOException. www.examclouds.com
  25. 25. Класс FileInputStream  Поток FileInputStream используется в Java для чтения данных из файла. www.examclouds.com
  26. 26. Конструкторы класса FileInputStream  InputStream a = new FileInputStream("D:/myprogramm/java/test.txt"); Представленный конструктор использует имя файла в качестве потока с целью создания объекта входного потока для считывания файла.  File file = new File("D:/myprogramm/java/test.txt"); InputStream a = new FileInputStream(file); Этот конструктор использует объектный файл с целью создания объекта входного потока для чтения файла. www.examclouds.com
  27. 27. Класс FileOutputStream  В Javа FileOutputStream используется для создания файла и последующей записи в него. Поток создаст файл в случае его отсутствия перед его открытием для вывода. www.examclouds.com
  28. 28. Конструкторы класса FileOutputStream  OutputStream outputStream = new FileOutputStream("D:/myprogramm/java/test.txt"); Представленный конструктор использует имя файла в качестве строки с целью создания объекта входного потока для записи файла в Java.  File file = new File("D:/myprogramm/java/test.txt");  OutputStream a = new FileOutputStream(file); Этот конструктор использует объектный файл с целью создания объекта выходного потока для записи файла. www.examclouds.com
  29. 29. Пример использования FileInputStream и FileOutputStream public class FileCopy { public static void main(String[] args) throws IOException { FileInputStream fileIn = null; FileOutputStream fileOut = null; try { fileIn = new FileInputStream("srciofile.txt"); fileOut = new FileOutputStream("srciocopied_file.txt"); int a; while ((a = fileIn.read()) != -1) { fileOut.write(a); } } finally { if (fileIn != null) { fileIn.close(); } if (fileOut != null) { fileOut.close(); } } } www.examclouds.com
  30. 30. Задание Переписать класс FileCopy:  Добавить catch блок для обработки IOException. www.examclouds.com
  31. 31. Конструкция try-with- resources  Ввели в Java 7.  Дает возможность объявлять один или несколько ресурсов в блоке try, которые будут закрыты автоматически без использования finally блока.  В качестве ресурса можно использовать любой объект, класс которого реализует интерфейс java.lang.AutoCloseable или java.io.Closable.  Если try блок также выбрасывает исключение, оно побеждает, а исключение из close() метода подавляется. www.examclouds.com
  32. 32. Примеры закрытия ресурсов  (TryWithResourcesDemo.java) public static String readFirstLineFromFileWithFinallyBlock(String path) throws IOException { BufferedReader br = new BufferedReader(new FileReader(path)); try { return br.readLine(); } finally { if (br != null) { br.close(); } } } public static String readFirstLineFromFile(String path) throws IOException { try (BufferedReader br = new BufferedReader(new FileReader(path))) { return br.readLine(); www.examclouds.com
  33. 33. Пример закрытия нескольких ресурсов  public static String readFirstLineFromFile2(String path) throws IOException { try (FileReader f = new FileReader("a.txt"); BufferedReader br = new BufferedReader(f)) { return br.readLine(); } } www.examclouds.com
  34. 34. Задание Переписать класс FileCopy:  Добавить блок try-with-resources. www.examclouds.com
  35. 35. Пример использования FileInputStream и FileOutputStream public class FileInputOutputStreamDemo { public static void main(String[] args) { try { char[] symbols = {'a', 'b', 'c'}; OutputStream output = new FileOutputStream("a.txt"); for (int i = 0; i < symbols.length; i++) { // Запись каждого символа в текстовый файл output.write(symbols[i]); } output.close(); InputStream input = new FileInputStream("a.txt"); int size = input.available(); for (int i = 0; i < size; i++) { // Чтение текстового файла посимвольно System.out.print((char) input.read() + " "); } input.close(); } catch (IOException e) { System.out.print("Exception"); } } www.examclouds.com
  36. 36. Задание Переписать класс FileInputOutputStreamDemo:  a) Добавить блок try-with-resources.  б) Замените for (int i = 0; i < c.length; i++) на блок for-each.  в) Пусть a.txt записывается в каталог src/io. www.examclouds.com
  37. 37. Классы символьных потоков www.examclouds.com
  38. 38. Классы символьных потоков www.examclouds.com
  39. 39. Классы символьных потоков www.examclouds.com
  40. 40. Класс Reader  Класс Reader - абстрактный класс, определяющий символьный потоковый ввод. В случае ошибок все методы класса передают исключение IOException. www.examclouds.com
  41. 41. Методы класса Reader Существует 3 основных read-метода: ▪ int read() - возвращает представление очередного доступного символа во входном потоке в виде целого числа. ▪ int read(char[] buffer) - пытается прочесть максимум buffer.length символов из входного потока в массив buffer. Возвращает количество символов, в действительности прочитанных из потока. ▪ int read(char[] buffer, int offset, int length) - пытается прочесть максимум length символов, расположив их в массиве buffer, начиная с элемента offset. Возвращает количество реально прочитанных символов. ▪ close() – метод закрывает поток. www.examclouds.com
  42. 42. Класс Writer  Класс Writer - абстрактный класс, определяющий символьный потоковый вывод. В случае ошибок все методы класса передают исключение IOException. www.examclouds.com
  43. 43. Методы класса Writer Существуют 5 основных write-метода: ● void write(int c) – записывает один символ в поток. ● void write(char[] buffer) – записывает массив символов в поток. ● void write(char[] buffer, int offset, int length) – записывает в поток подмассив символов длиной length, начиная с позиции offset. ● void write(String aString) – записывает строку в поток. ● void write(String aString, int offset, int length) – записывает в поток подстроку символов длиной length, начиная с позиции offset. www.examclouds.com
  44. 44. Класс FileReader  Класс FileReader, производный от класса Reader, можно использовать для чтения содержимого файла. В конструкторе класса нужно указать либо путь к файлу, либо объект типа File. www.examclouds.com
  45. 45. Класс FileWriter  Класс FileWriter создаёт объект класса, производного от класса Writer, который вы можете применять для записи файла. Создание объекта не зависит от наличия файла, он будет создан в случае необходимости. Если файл существует и он доступен только для чтения, то передаётся исключение IOException. www.examclouds.com
  46. 46. Пример FileWriter и FileReader public class FileWriterReaderDemo { public static void main(String[] args) { char[] array = new char[50]; int size = 0; File file = new File("fileWrite.txt"); try (FileWriter fw = new FileWriter(file); FileReader fr = new FileReader(file)) { fw.write("LearnnJava!n"); fw.flush(); size = fr.read(array); System.out.println("Количество прочитанных символов: " + size + " "); for (int i = 0; i < size; i++) { System.out.print(array[i]); } } catch (IOException e) { System.out.print(e.getMessage()); } } } www.examclouds.com
  47. 47. Задание  Написать класс, который копирует содержимое из одного файла в другой.  Используем классы, FileReader, FileWriter. www.examclouds.com
  48. 48. Класс BufferedWriter  Класс BufferedWriter записывает текст в поток, предварительно буферизируя записываемые символы, тем самым снижая количество обращений к физическому носителю для записи данных.  По сравнению с классом FileWriter, BufferedWriter записывает относительно большие куски данных в файл, минимизируя количество обращений к файлу. Другими словами операции проходят быстрее.  Добавляет метод void newLine(). www.examclouds.com
  49. 49. Конструкторы класса BufferedWriter  BufferedWriter(Writer out) ; BufferedWriter(Writer out, int sz);  В качестве параметра он принимает поток вывода, в который надо осуществить запись. Второй параметр указывает на размер буфера. www.examclouds.com
  50. 50. Пример класса BufferedWriter  public class BufferedWriterDemo { public static void main(String[] args) { try (BufferedWriter bufferedWriter = new BufferedWriter( new FileWriter("srciobuffWriter.txt"))) { String text = "Привет мир!"; bufferedWriter.write(text); bufferedWriter.newLine(); bufferedWriter.write(text); } catch (IOException ex) { System.out.println(ex.getMessage()); } } www.examclouds.com
  51. 51. Класс BufferedReader  Класс BufferedReader считывает текст из символьного потока ввода, буферизируя прочитанные символы. Использование буфера призвано увеличить производительность чтения данных из потока.  Добавляет метод String readLine(). www.examclouds.com
  52. 52. Конструкторы класса BufferedReader  BufferedReader(Reader in)  BufferedReader(Reader in, int sz)  Второй конструктор, кроме потока ввода, из которого производится чтение, также определяет размер буфера, в который будут считываться символы. www.examclouds.com
  53. 53. Пример класса BufferedReader public class BufferedReaderDemo { public static void main(String[] args) { try (BufferedReader br = new BufferedReader( new FileReader("srciofile.txt"))) { String str; while ((str = br.readLine()) != null) { System.out.println(str); } } catch (IOException e) { System.out.println(e.getMessage()); } } } www.examclouds.com
  54. 54. Задание  Написать класс, который копирует содержимое из одного файла в другой.  Используем классы BufferedReader, FileReader, BufferedWriter , FileWriter. www.examclouds.com
  55. 55. Класс PrintWriter  Класс PrintWriter расширяет класс Writer. Содержит методы для форматирования. www.examclouds.com
  56. 56. Конструкторы класса PrintWriter 1. PrintWriter(File file) - автоматически добавляет информацию в указанный файл. 2. PrintWriter(String fileName) - автоматически добавляет информацию в файл по указанному имени. 3. PrintWriter(OutputStream out) - для вывода информации используется существующий объект OutputStream, автоматически сбрасывая в него данные. 4. PrintWriter(Writer out) - для вывода информации используется существующий объект Writer, в который автоматически идет запись данных. www.examclouds.com
  57. 57. Методы класса PrintWriter  println() - вывод строковой информации с переводом строки.  print() - вывод строковой информации без перевода строки.  printf() - форматированный вывод.  format() - форматированный вывод. www.examclouds.com
  58. 58. Пример класса PrintWriter public class PrintWriterDemo { public static void main(String[] args) { String s1 = "Привет мир!"; String s2 = "Hello World!"; try (PrintWriter printWriter = new PrintWriter("notes.txt")) { printWriter.println(s1); int i = 2; printWriter.printf("Квадрат числа %d равен %d %n", i, i * i); printWriter.write(s2); printWriter.print("Конец"); System.out.println("Запись в файл произведена"); } catch (IOException ex) { System.out.println(ex.getMessage()); } } } www.examclouds.com
  59. 59. Упаковка (wrapping) классов  Потокам можно придать новые свойства, заключив один поток в оболочку другого потока.  Класс BufferedReader может быть применен для более эффективного чтения символов, массивов и строк.  BufferedReader in = new BufferedReader(new FileReader("foo.in"));  Классы BufferedWriter и PrintWriter могут быть использованы для более эффективной записи символов, массивов, строк и других типов данных.  BufferedWriter out = new BufferedWriter( new FileWriter("foo.out")); PrintWriter out = new PrintWriter( new BufferedWriter(new FileWriter( "foo.out"))); www.examclouds.com
  60. 60. Предопределенные потоки ввода-вывода  Все программы на Java автоматически импортируют пакет java.lang. В этом пакете определен класс System, инкапсулирующий некоторые свойства исполняющей среды Java.  Класс System содержит три переменные предопределенных потоков ввода-вывода: in, out и err.  Эти переменные объявлены в классе System как public, static и final. www.examclouds.com
  61. 61. Предопределенные потоки ввода-вывода  Объект System.out называют потоком стандартного вывода. По умолчанию с ним связана консоль.  На объект System.in ссылаются как на стандартный ввод, который по умолчанию связан с клавиатурой.  К объекту System.err обращаются как к стандартному потоку ошибок, который по умолчанию также связан с консолью. www.examclouds.com
  62. 62. Классы байтовых потоков Класс Назначение BufferedlnputStream Буферизированный входной поток. BufferedOutputStream Буферизированный выходной поток. ByteArraylnputStream Входной поток, читающий из массива байт. ByteArrayOutputStream Выходной поток, записывающий в массив байт. DatalnputStream Входной поток, включающий методы для чтения стандартных типов данных Java. DataOutputStream Выходной поток, включающий методы для записи стандартных типов данных Java. FilelnputStream Входной поток, читающий из файла. FileOutputStream Выходной поток, записывающий в файл. FilterlnputStream Реализация InputStream. FilterOutputStream Реализация OutputStream. www.examclouds.com
  63. 63. Классы байтовых потоков Класс Назначение InputStream Абстрактный класс, описывающий поток ввода. ObjectlnputStream Входной поток для объектов. ObjectOutputStream Выходной поток для объектов. OutputStream Абстрактный класс, описывающий поток вывода. PipedlnputStream Входной канал (например, межпрограммный). PipedOutputStream Выходной канал. PrintStream Выходной поток, включающий print() и println(). PushbacklnputStream Входной поток, реализующий операцию pushback (вернуть назад). RandomAccessFile Позволяет перемещаться по файлу, читать из него или писать в него. SequencelnputStream Входной поток, представляющий собой комбинацию двух и более входных потоков, которые читаются совместно один после другого. www.examclouds.com
  64. 64. Классы символьных потоков Класс Назначение BufferedReader Буферизованный входной символьный поток. BufferedWriter Буферизованный выходной символьный поток. CharArrayReader Входной поток, который читает из символьного массива. CharArrayWriter Выходной поток, который пишет в символьный массив. FileReader Входной поток, читающий файл. FileWriter Выходной поток, пишущий в файл. FilterReader Фильтрующий читатель. FilterWriter Фильтрующий писатель. InputStreamReader Входной поток, транслирующий байты в символы. LineNumberReader Входной поток, подсчитывающий строки. www.examclouds.com
  65. 65. Классы символьных потоков Класс Назначение OutputStreamWriter Выходной поток, транслирующий байты в символы. PipedReader Входной канал. PipedWriter Выходной канал. PrintWriter Выходной поток, включающий print() и println(). PushbackReader Входной поток, позволяющий возвращать символы обратно в поток. Reader Абстрактный класс, описывающий символьный ввод. StringReader Входной поток, читающий из строки. StringWriter Выходной поток, пишущий в строку. Writer Абстрактный класс, описывающий символьный вывод. www.examclouds.com
  66. 66. Типы потоков данных Reader Writer InputStream OutputStream С и м в о л ь н ы е п о т о к и Б а й т о в ы е п о т о к и www.examclouds.com
  67. 67. Типы потоков данных Reader BufferedReader Writer BufferedWriter InputStream FilterInputStream BufferedInputStream OutputStream FilterOutputStream BufferedOutputStream С и м в о л ь н ы е п о т о к и Б а й т о в ы е п о т о к и www.examclouds.com
  68. 68. Типы потоков данных Reader BufferedReader InputStreamReader FileReader Writer BufferedWriter FileWriter OutputStreamWrite r InputStream FileInputStream FilterInputStream BufferedInputStream OutputStream FileOutputStream FilterOutputStream BufferedOutputStream С и м в о л ь н ы е п о т о к и Б а й т о в ы е п о т о к и www.examclouds.com
  69. 69. Типы потоков данных Reader BufferedReader CharArrayReader StringReader InputStreamReader FileReader Writer BufferedWriter CharArrayWriter StringWriter PrintWriter FileWriter OutputStreamWrite r InputStream FileInputStream ObjectInputStream DataInputStream FilterInputStream BufferedInputStream OutputStream FileOutputStream ObjectOutputStream DataOutputStream FilterOutputStream BufferedOutputStream С и м в о л ь н ы е п о т о к и Б а й т о в ы е п о т о к и www.examclouds.com
  70. 70. Класс Scanner  Объект класса java.util.Scanner упрощает разбор строки из потока ввода.  При вводе могут использоваться данные из консоли, файла, строки или любого другого источника, реализующего интерфейсы Readable или ReadableByteChannel.  Хотя Scanner и не является потоком, у него тоже обязательно вызывать метод close(), который закроет используемый основной источник. www.examclouds.com
  71. 71. Пример класса Scanner public class ScannerExample { private static String fileName = "scan.txt"; public static void scanFile() { try (FileReader fileReader = new FileReader(fileName); Scanner scanner = new Scanner(fileReader)) { while (scanner.hasNext()) { if (scanner.hasNextInt()) { System.out.println(scanner.nextInt() + " :int"); } else if (scanner.hasNextDouble()) { System.out.println(scanner.nextDouble() + " :double"); } else if (scanner.hasNextBoolean()) { System.out.println(scanner.nextBoolean() + " :boolean"); } else { System.out.println(scanner.next() + " :String"); } } } catch (IOException e) { System.out.println(e.getMessage()); } } public static void makeFile() { try (FileWriter fileWriter = new FileWriter(fileName)) { fileWriter.write("2 Java 1,5 true 1.6 "); } catch (IOException e) { System.out.println(e.getMessage()); } } public static void main(String[] args) { ScannerExample.makeFile(); ScannerExample.scanFile(); } } www.examclouds.com
  72. 72. Пример класса Scanner public class ScannerDelimiterExample { public static void main(String[] args) { double sum = 0.0, number; Scanner scanner = new Scanner("1,3;2,0; 8,5; 4,8; 9,0; 1; 10; abc"); scanner.useDelimiter(";s*"); while (scanner.hasNext()) { if (scanner.hasNextDouble()) { number = scanner.nextDouble(); System.out.println("Число:" + number); sum += number; } else { System.out.println("Строка: " + scanner.next()); } } System.out.println("Сумма чисел = " + sum); } } www.examclouds.com
  73. 73. • Лекции, задания, видео, тесты и вопросы на: • https://www.examclouds.com/ru/java/java-core- russian/potoki-vvoda-vivoda • Подписывайтесь на страницу: • https://www.facebook.com/Examclouds • Подписывайтесь на канал • https://www.youtube.com/c/tatyanamilkina www.examclouds.com

×