Курс java-2016. Занятие 06. Файлы и ввод-вывод

22
Курс по Java, 2016 Файлы и ввод-вывод Денис Нелюбин, [email protected]

Upload: 7bits

Post on 11-Feb-2017

405 views

Category:

Education


2 download

TRANSCRIPT

Page 1: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

Файлы и ввод-вывод

Денис Нелюбин, [email protected]

Page 2: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

JavaDocЛучший друг Java-разработчика

http://docs.oracle.com/javase/8/docs/api/

Page 3: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

java.io

Page 4: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

java.io.FileПуть до файла на диске

File dir = new File("."); // текущий каталогFile file = new File(dir, "test.txt"); // файл в каталогеFile.separator; // разделитель пути (/ или \)file.getAbsoluteFile(); // абсолютный путь (как File)file.getAbsolutePath(); // абсолютный путь (как String)file.getParent(); // родительский путь (String)file.getPath(); // путь до файлаfile.listFiles(); // список файлов в каталоге

Page 5: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

java.io.FileМетаданные и манипуляции

file.exists(); // проверка существованияfile.canRead(); // проверка возможности чтенияfile.isDirectory(); // каталог ли этоfile.lastModified(); // время последнего изменения file.length(); // размерfile.createNewFile(); // создание пустого файлаfile.delete(); // удаление файлаfile.setReadable(true); // разрешение чтения

Page 6: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

java.io.IOExceptionБазовый класс всех ошибок ввода-вывода

Page 7: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

java.io.InputStreamПоток байт для чтения

InputStream in;

in.read(); // прочитать байтbyte[] bytes = new byte[16];in.read(bytes); // прочитать в буферin.skip(10); // пропустить 10 байтin.close(); // закрыть поток

Page 8: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

InputStream wrappingПотоки оборачивают друг друга, добавляя новые свойства

InputStream fileStream = new FileInputStream(new File("test.txt"));

InputStream bufferedStream = new BufferedInputStream(fileStream);

bufferedStream.read(); // буферизованное чтение

Page 9: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

InputStreams

Page 10: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

java.io.OutputStreamПоток байт для записи

OutputStream out;

out.write('a'); // записать байтbyte[] bytes = { 'a', 'b', 'c' };out.write(bytes); // записать буферout.flush(); // сбросить на дискout.close(); // закрыть поток

Page 11: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

OutputStream wrappingПотоки оборачивают друг друга, добавляя новые свойства

OutputStream fileStream = new FileOutputStream(new File("test.txt"));

PrintStream printStream = new PrintStream(fileStream);

printStream.println("hello");

Page 12: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

OutputStreams

Page 13: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

java.io.ReaderПоток символов для чтения

Reader reader;

reader.read(); // прочитать символchar[] chars = new char[16];reader.read(chars); // прочитать в буферreader.skip(10); // пропустить 10 символовreader.close(); // закрыть поток

Page 14: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

Reader wrappingПотоки оборачивают друг друга, добавляя новые свойстваReader оборачивает InputStream, добавляя кодировку

InputStream fileStream = new FileInputStream(new File("test.txt"));

Reader fileReader = new InputStreamReader(fileStream, "utf-8");

BufferedReader reader = new BufferedReader(fileReader);

reader.readLine(); // прочитать строку текста (String)

Page 15: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

Readers

Page 16: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

java.io.WriterПоток символов для записи

Writer writer;

writer.write('a'); // записать символchar[] chars = { 'a', 'b', 'c'};writer.write(chars); // записать буферwriter.write("abc"); // записать строкуwriter.flush(); // сбросить на дискwriter.close(); // закрыть поток

Page 17: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

Writer wrappingПотоки оборачивают друг друга, добавляя новые свойстваWriter оборачивает OutputStream, добавляя кодировку

OutputStream fileStream = new FileOutputStream(new File("test.txt"));

Writer fileWriter = new OutputStreamWriter(fileStream, "utf-8");

PrintWriter printWriter = new PrintWriter(fileWriter);

printWriter.println("hello");

Page 18: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

Writers

Page 19: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

Закрытие потоковПотоки обязательно нужно закрывать, в блоке finally

OutputStream out = new FileOutputStream(new File("test.txt"));

try { out.write('a'); //...} finally { out.close();}

Page 20: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

java.lang.AutoClosableC Java 1.7 можно закрывать потоки в блоке try

try (OutputStream out = new FileOutputStream(new File("test.txt"))) {

out.write('a'); //...}

Page 21: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

Копированиеprivate static final int BUF_SIZE = 1024;

public void copy(InputStream in, OutputStream out) throws IOException {

byte[] buf = new byte[BUF_SIZE]; int len = 0; while ((len = in.read(buf)) >= 0) { out.write(buf, 0, len); }}

Page 22: Курс Java-2016. Занятие 06. Файлы и ввод-вывод

Курс по Java, 2016

Домашнее заданиеФорматирование Java кода из строки или файла.

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

Посмотреть доклад Евгения Тюменцева: http://2015-autumn.happydev-lite.ru/room-event/133

Создать репозиторий на Github и прислать ссылку на [email protected] и [email protected]