Курс java-2016. Занятие 06. Файлы и ввод-вывод
TRANSCRIPT
Курс по 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 и прислать ссылку на [email protected] и [email protected]