Глухих Михаил Игоревич mailto:...

24
Глухих Михаил Игоревич mailto: [email protected]

Upload: others

Post on 19-Sep-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

Глухих Михаил Игоревичmailto: [email protected]

Page 2: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

Консольные программы (git)◦ Консоль

Вывод (println) – довольно часто

2

Page 3: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

Консольные программы (git)◦ Консоль

Вывод (println) – довольно часто

Ввод (readLine) – КРАЙНЕ редко

3

Page 4: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

Консольные программы (git)◦ Консоль

Вывод (println) – довольно часто

Ввод (readLine) – КРАЙНЕ редко

◦ Аргументы командной строки

fun main(args: Array<String>) { … }

4

Page 5: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

Консольные программы (git)◦ Консоль

Вывод (println) – довольно часто

Ввод (readLine) – КРАЙНЕ редко

◦ Аргументы командной строки

fun main(args: Array<String>) { … }

◦ Внешние файлы

Файлы настроек

Файлы с входными данными

Файлы с выходными данными

Временные файлы

Редактируемые файлы ...

5

Page 6: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

Текстовые◦ Просто текст

◦ Упорядоченный текст

XML

6

Page 7: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

Текстовые◦ Просто текст

◦ Упорядоченный текст

XML

Бинарные◦ PDF

◦ JPEG

◦ …

7

Page 8: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

fun alignFile(inputName: String, lineLength: Int, outputName: String) {val writer = File(outputName).bufferedWriter()var currentLineLength = 0fun append(word: String) { ... }for (line in File(inputName).readLines()) {

if (line.isEmpty()) {writer.newLine()if (currentLineLength > 0) {

writer.newLine()currentLineLength = 0

}}for (word in line.split(Regex("\\s+"))) {

append(word)}

}writer.close()

}

8

Page 9: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

fun alignFile(inputName: String, lineLength: Int, outputName: String) {val writer = File(outputName).bufferedWriter()var currentLineLength = 0fun append(word: String) {

if (currentLineLength > 0) {if (word.length + currentLineLength >= lineLength) {

writer.newLine()currentLineLength = 0

} else {writer.write(" ")currentLineLength++

}}writer.write(word)currentLineLength += word.length

}// …

}

9

Page 10: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

Объект этого типа соответствует файлу

= java.io.File

Функции◦ readLines(): List<String>

◦ bufferedWriter(): BufferedWriter

◦ bufferedReader(): BufferedReader

◦ …

10

Page 11: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

Объект этого типа может записывать (буферизованную) информацию в файл или...

= java.io.BufferedWriter

Функции◦ newLine()

◦ write(s: String)

◦ close()

◦ …

11

Page 12: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

Три уровня работы с файлами◦ Файл = поток байт: InputStream / OutputStream

12

Page 13: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

Три уровня работы с файлами◦ Файл = поток байт: InputStream / OutputStream

◦ Файл = поток символов: InputStreamReader / OutputStreamWriter

13

Page 14: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

Три уровня работы с файлами◦ Файл = поток байт: InputStream / OutputStream

◦ Файл = поток символов: InputStreamReader / OutputStreamWriter

NB: знает про кодировку!

14

Page 15: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

Три уровня работы с файлами◦ Файл = поток байт: InputStream / OutputStream

◦ Файл = поток символов: InputStreamReader / OutputStreamWriter

NB: знает про кодировку!

◦ Файл состоит из строк: BufferedReader / BufferedWriter

15

Page 16: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

File◦ InputStream file.inputStream()

InputStreamReader file.reader()

BufferedReader file.bufferedReader()

16

Page 17: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

Closable: writer.close()fun foo(outputName: String) {

val writer = File(outputName).bufferedWriter()

try {

writer.write(…)

}

finally {

writer.close()

}

}

17

Page 18: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

Closable: writer.close() / writer.use !fun foo(outputName: String) {

val writer = File(outputName).bufferedWriter()

writer.use {

it.write(…)

}

}

18

Page 19: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

InputStream◦ inputStream.read(): Int

◦ inputStream.read(arr: ByteArray): Int

19

Page 20: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

InputStream◦ inputStream.read(): Int

◦ inputStream.read(arr: ByteArray): Int

InputStreamReader◦ reader.read(): Int

◦ reader.read(arr: CharArray): Int

20

Page 21: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

InputStream◦ inputStream.read(): Int

◦ inputStream.read(arr: ByteArray): Int

InputStreamReader◦ reader.read(): Int

◦ reader.read(arr: CharArray): Int

BufferedReader◦ bufReader.readLine(): String

◦ bufReader.readLines(): List<String>

21

Page 22: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

OutputStream◦ outputStream.write(b: Int)

◦ outputStream.write(arr: ByteArray)

OutputStreamWriter◦ writer.write(c: Int):

◦ writer.write(arr: CharArray)

BufferedWriter◦ bufWriter.write(s: String)

◦ bufWriter.newLine() …

22

Page 23: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

OutputStream◦ outputStream.write(b: Int)

◦ outputStream.write(arr: ByteArray)

OutputStreamWriter◦ writer.write(c: Int):

◦ writer.write(arr: CharArray)

BufferedWriter◦ bufWriter.write(s: String)

◦ bufWriter.newLine() …

PrintStream (!) file.printStream()◦ OutputStream + encoding / print / println / format

23

Page 24: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin08.pdfКонсольные программы (git) Консоль Вывод

См. lesson8/task1 в обучающем проекте

Решите хотя бы одну из задач

Протестируйте решения с помощью готовых тестов

Добавьте ещё хотя бы два тестовых случая

Добавьте коммит в свой репозиторий

Создайте Submission и убедитесь в правильности решения

24