ݺߣ

ݺߣShare a Scribd company logo
Курс по 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.AutoClosable
C 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

More Related Content

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

  • 1. Курс по Java, 2016 Файлы и ввод-вывод Денис Нелюбин, denis.nelubin@7bits.it
  • 2. Курс по Java, 2016 JavaDoc Лучший друг Java-разработчика http://docs.oracle.com/javase/8/docs/api/
  • 3. Курс по Java, 2016 java.io
  • 4. Курс по 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(); // список файлов в каталоге
  • 5. Курс по Java, 2016 java.io.File Метаданные и манипуляции file.exists(); // проверка существования file.canRead(); // проверка возможности чтения file.isDirectory(); // каталог ли это file.lastModified(); // время последнего изменения file.length(); // размер file.createNewFile(); // создание пустого файла file.delete(); // удаление файла file.setReadable(true); // разрешение чтения
  • 6. Курс по Java, 2016 java.io.IOException Базовый класс всех ошибок ввода-вывода
  • 7. Курс по Java, 2016 java.io.InputStream Поток байт для чтения InputStream in; in.read(); // прочитать байт byte[] bytes = new byte[16]; in.read(bytes); // прочитать в буфер in.skip(10); // пропустить 10 байт in.close(); // закрыть поток
  • 8. Курс по Java, 2016 InputStream wrapping Потоки оборачивают друг друга, добавляя новые свойства InputStream fileStream = new FileInputStream(new File("test.txt")); InputStream bufferedStream = new BufferedInputStream(fileStream); bufferedStream.read(); // буферизованное чтение
  • 9. Курс по Java, 2016 InputStreams
  • 10. Курс по Java, 2016 java.io.OutputStream Поток байт для записи OutputStream out; out.write('a'); // записать байт byte[] bytes = { 'a', 'b', 'c' }; out.write(bytes); // записать буфер out.flush(); // сбросить на диск out.close(); // закрыть поток
  • 11. Курс по Java, 2016 OutputStream wrapping Потоки оборачивают друг друга, добавляя новые свойства OutputStream fileStream = new FileOutputStream(new File("test.txt")); PrintStream printStream = new PrintStream(fileStream); printStream.println("hello");
  • 12. Курс по Java, 2016 OutputStreams
  • 13. Курс по Java, 2016 java.io.Reader Поток символов для чтения Reader reader; reader.read(); // прочитать символ char[] chars = new char[16]; reader.read(chars); // прочитать в буфер reader.skip(10); // пропустить 10 символов reader.close(); // закрыть поток
  • 14. Курс по 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)
  • 15. Курс по Java, 2016 Readers
  • 16. Курс по 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(); // закрыть поток
  • 17. Курс по 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");
  • 18. Курс по Java, 2016 Writers
  • 19. Курс по Java, 2016 Закрытие потоков Потоки обязательно нужно закрывать, в блоке finally OutputStream out = new FileOutputStream(new File("test.txt")); try { out.write('a'); //... } finally { out.close(); }
  • 20. Курс по Java, 2016 java.lang.AutoClosable C Java 1.7 можно закрывать потоки в блоке try try (OutputStream out = new FileOutputStream(new File("test.txt"))) { out.write('a'); //... }
  • 21. Курс по 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); } }
  • 22. Курс по Java, 2016 Домашнее задание Форматирование Java кода из строки или файла. Расставить отступы внутри фигурных скобок, переводы строки после точки с запятой. (Без поддержки for, комментариев и строковых констант). Источником кода может служить файл или строка. Посмотреть доклад Евгения Тюменцева: http://2015-autumn.happydev-lite. ru/room-event/133 Создать репозиторий на Github и прислать ссылку на at@7bits.it и denis. nelubin@7bits.it