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

Post on 11-Feb-2017

405 Views

Category:

Education

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Курс по Java, 2016

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

Денис Нелюбин, denis.nelubin@7bits.it

Курс по Java, 2016

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

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

Курс по Java, 2016

java.io

Курс по 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(); // список файлов в каталоге

Курс по Java, 2016

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

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

Курс по Java, 2016

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

Курс по Java, 2016

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

InputStream in;

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

Курс по Java, 2016

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

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

InputStream bufferedStream = new BufferedInputStream(fileStream);

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

Курс по Java, 2016

InputStreams

Курс по Java, 2016

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

OutputStream out;

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

Курс по Java, 2016

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

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

PrintStream printStream = new PrintStream(fileStream);

printStream.println("hello");

Курс по Java, 2016

OutputStreams

Курс по Java, 2016

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

Reader reader;

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

Курс по 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)

Курс по Java, 2016

Readers

Курс по 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(); // закрыть поток

Курс по 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");

Курс по Java, 2016

Writers

Курс по Java, 2016

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

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

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

Курс по Java, 2016

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

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

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

Курс по 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); }}

Курс по Java, 2016

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

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

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

Создать репозиторий на Github и прислать ссылку на at@7bits.it и denis.nelubin@7bits.it

top related