Язык программирования JAVA. Потоки ввода/вывода

Содержание

Слайд 2

Содержание Поток. Байтовые и символьные потоки. Базовые классы. Блочное копирование. Класс

Содержание

Поток.
Байтовые и символьные потоки.
Базовые классы.
Блочное копирование.
Класс File.
Ввод/вывод на консоль.
Чтение строк с

консоли.
Сериализация.
Байтовый в символьный и наоборот.
Перекодирование файла.
Слайд 3

Поток Поток является абстракцией, которая или производит, или потребляет информацию. Все

Поток

Поток является абстракцией, которая или производит, или потребляет информацию.
Все потоки

ведут себя одинаковым образом, хотя фактические физические устройства, с которыми они связаны, могут сильно различаться.
Благодаря потокам ваша программа выполняет ввод/вывод, не понимая различий между клавиатурой и сетью.
Поток скрывает детали низкоуровневых процессов ввода/вывода.
В Java система ввода-вывода представлена в java.io.*
Слайд 4

Байтовые и символьные потоки Потоки бывают для чтения(ввод) и записи(вывод). Два

Байтовые и символьные потоки

Потоки бывают для чтения(ввод) и записи(вывод).
Два типа потоков

– байтовый и символьный.

Чтение с клавиатуры, чтение из файла и т.д.

Вывод на консоль, запись в файл и т.д.

Слайд 5

Базовые классы

Базовые классы

Слайд 6

Байтовые потоки

Байтовые потоки

Слайд 7

Классы - байтовые потоки

Классы - байтовые потоки

Слайд 8

Символьные потоки

Символьные потоки

Слайд 9

Классы - символьные потоки

Классы - символьные потоки

Слайд 10

Класс ByteArrayInputStream Поток, считывающий (записывающий) данные из массива байт.

Класс ByteArrayInputStream

Поток, считывающий (записывающий) данные из массива байт.

Слайд 11

Класс ByteArrayOutputStream Применяется для записи в массив.

Класс ByteArrayOutputStream

Применяется для записи в массив.

Слайд 12

Блочное копирование Процедура копирования void copy(InputStream is, OutputStream os) throws IOException

Блочное копирование

Процедура копирования
void copy(InputStream is, OutputStream os) throws IOException {
byte[]

b = new byte[1024];
int c = 0;
while ((c = is.read(b)) >= 0) {
os.write(b, 0, c);
}
}
Слайд 13

Класс File Позволяет осуществлять манипуляции с файлами и директориями Создание дескриптора

Класс File

Позволяет осуществлять манипуляции с файлами и директориями
Создание дескриптора по имени:
File(pathname)

– абсолютный или относительный путь
Создание дескриптора по имени и директории:
File(File dir, name) File(String dir, name)
Получение информации
getName() – получить имя
getPath() – получить имя и путь
getAbsolutePath() – получить абсолютный путь
getAbsoluteFile() – получить абсолютный дескриптор
Определение родителя
String getParent() – как строки
File getParetnFile() – как дескриптора
Платформозависимые разделители
separator / separtorChar – разделитель директорий
pathSeparator / pathSeparatorChar – разделитель в файлов и директорий в путях
Слайд 14

Операции с файлами Проверка типа isFile() – является ли файлом isDirectory()

Операции с файлами

Проверка типа
isFile() – является ли файлом
isDirectory() – является ли

директорией
isHidden() – является ли скрытым
Получение информации о файле
exist() – проверка существования
length() – длина файла
lastModifier() – время последней модификации
Создание
mkdir() – создать одну директорию
mkdirs() – создать все директории
createNewFile() – создать пустой файл
Удаление
delete() – удалить немедленно
deleteOnExit() – удалить после завершения
Переименование / перенос
renameTo(file) – переименовать / перенисти в заданное место
Слайд 15

Листинг директории Листинг всех файлов String[] list() – получить имена файлов

Листинг директории

Листинг всех файлов
String[] list() – получить имена файлов
File[] listFiles() –

получить дескрипторы файлов
Листинг по критерию
String[] list(FileNameFilter) – получить имена файлов
File[] listFiles(FileFilter) – получить дескрипторы файлов
Слайд 16

Класс FileInputStream Поток для чтения из файла по байтам. try {

Класс FileInputStream

Поток для чтения из файла по байтам.

try {
FileInputStream fin

= new FileInputStream("/etc/hosts");
try {
int i = -1;
while ((i = fin.read()) != -1) {
System.out.print((char) i);
}
} finally {
fin.close();
}
} catch (FileNotFoundException ex) {
System.out.println(ex.getMessage());
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
Слайд 17

Класс FileOutputStream Поток для записи в файл по байтам. String text

Класс FileOutputStream

Поток для записи в файл по байтам.

String text = "Hello

world!"; // строка для записи
try {
FileOutputStream fos = new FileOutputStream("notes.txt");
try {
// перевод строки в байты
byte[] buffer = text.getBytes();
fos.write(buffer, 0, buffer.length);
} finally {
fos.close();
}
} catch (FileNotFoundException ex) {
System.out.println(ex.getMessage());
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
Слайд 18

Классы BufferedInputStream и BufferedOutputStream Чтение и запись данных происходит из буфера.

Классы BufferedInputStream и BufferedOutputStream

Чтение и запись данных происходит из буфера.
Ускоряет процесс

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

try {BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(new File("/etc/hosts")));
try {
int c;
while ((c = bis.read()) != -1) {
System.out.print((char) c);
}
} finally { bis.close(); }
} catch (Exception e) {
System.out.println(e.getMessage());
}

Слайд 19

Классы FileReader и FileWriter Writer writer; try { Reader reader =

Классы FileReader и FileWriter

Writer writer;
try {
Reader reader = new

FileReader("notes.txt");
try {
writer = new FileWriter("output.txt");
int c = 0;
while ((c = reader.read()) >= 0) {
writer.write(Character.toUpperCase((char) c));
}
writer.close();
} finally {
reader.close();
}
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
e.printStackTrace();
}
Слайд 20

Байтовый поток в символьный При чтении возможно преобразование байтового потока в

Байтовый поток в символьный

При чтении возможно преобразование байтового потока в символьный,

с указанием кодировки
Класс InputStreamReader
InputStreamReader(InputStream, encoding)
Слайд 21

Ввод/вывод на консоль PrintWriter pw = new PrintWriter(System.out, true); pw.println("Это строка:");

Ввод/вывод на консоль

PrintWriter pw = new PrintWriter(System.out, true);
pw.println("Это строка:");
int i =

-7;
pw.println(i);
double d = 4.5e-7;
pw.println(d);

char ch = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Введите символы, 'q' - для завершения.");
do {
try {
ch = (char) br.read();
} catch (IOException e) {
e.printStackTrace();
}
System.out.print(ch);
} while(ch != 'q');

Слайд 22

Чтение строк с консоли BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); List

Чтение строк с консоли

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
List

list = new ArrayList<>();
System.out.println("Введите строки текста.");
System.out.println("Введите 'stop' для завершения.");
String s = null;
while(true){
try {
s = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
if(s.equals("stop")) break;
list.add(s);
}
System.out.println("Вот ваши строки:");
for (String str :list) {
System.out.println(str);
}
Слайд 23

Символьный поток в байтовый При записи возможно преобразование символьного потока в

Символьный поток в байтовый

При записи возможно преобразование символьного потока в байтовый,

с указанием кодировки
Класс OutputStreamWriter
OutputStreamWriter(OutputStream, encoding)
Слайд 24

Пример: перекодирование файла try { Reader reader = new InputStreamReader( new

Пример: перекодирование файла

try {
Reader reader = new InputStreamReader(
new

FileInputStream("input.txt"), "Cp1251");
Writer writer = new OutputStreamWriter(
new FileOutputStream("output.txt"), "Cp866");
int c = 0;
while ((c = reader.read()) >= 0) writer.write(c);
reader.close();
writer.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Слайд 25

Сериализация Сериализация – процесс преобразования объекта в последовательность байт. Сериализованный объект

Сериализация

Сериализация – процесс преобразования объекта в последовательность байт.
Сериализованный объект легко передать

по сети, сохранить в файл.
Чтобы объект мог быть сериализован, он должен реализовывать интерфейс java.io.Serializable.
java.io.Serializable — маркер, нет ни одного метода.
Классы ObjectInputStream и ObjectOutputStream производят сериализацию и десериализацию объектов.
Свойства класса, помеченные модификатором transient, не сериализуются.
Слайд 26

Пример сериализации class Person implements Serializable { public String name =

Пример сериализации

class Person implements Serializable {
public String name = null;

public int age = 0;
}
ObjectInputStream objectInputStream;
try {
ObjectOutputStream objectOutputStream = new ObjectOutputStream(
new FileOutputStream("person.bin"));
try {
Person person = new Person();
person.name = "Jakob Jenkov";
person.age = 40;
objectOutputStream.writeObject(person);
objectOutputStream.close();
} finally {objectOutputStream.close(); }
} catch (FileNotFoundException e) {e.printStackTrace();
} catch (IOException e) {e.printStackTrace();}
Слайд 27

Пример десериализации try { objectInputStream = new ObjectInputStream(new FileInputStream("person.bin")); try {

Пример десериализации

try {
objectInputStream = new ObjectInputStream(new FileInputStream("person.bin"));
try {
Person

personRead = (Person) objectInputStream.readObject();
System.out.println(personRead.name);
System.out.println(personRead.age);
} finally {
objectInputStream.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}