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(); // буферизованное чтение
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");
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)
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");
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