Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СТП / lec / java2014-lec-10

.pdf
Скачиваний:
8
Добавлен:
03.03.2016
Размер:
1.29 Mб
Скачать

Создание нового объекта File

Класс File предоставляет несколько способов

создания объекта:

File myFile;

myFile = new File("myfile.txt");

myFile = new File("MyDocs", "myfile.txt");

Папки в Java обрабатываются как файлы, то есть можно создать объект File, который представляет собой папку.

Затем этот объект может быть использован для идентификации других файлов.

File myDir = new File ("MyDocs"); myFile = new File(myDir, "myfile.txt");

11

Создание нового объекта File

http://docs.oracle.com/javase/7/docs/api/java/io/File.html 12

Класс File – основные методы

Информация о файле:

String getName() String getPath()

String getAbsolutePath() String getParent()

long lastModified() long length()

Изменение файла:

boolean renameTo(File newName) boolean delete()

Работа с папками:

boolean mkdir() String[] list()

Проверка файла:

boolean exists() boolean canWrite() boolean canRead() boolean isFile() boolean isDirectory() boolean isAbsolute() boolean isHidden()

http://docs.oracle.com/javase/7/docs/api/java/io/File.html 13

Класс File – основные методы

public static File[] listRoots()

Метод возвращает массив объектов File,

которые указывают доступные системные корневые диски

public String[] list(FilenameFilter filter)

FilenameFilter.accept(java.io.File, java. lang. String)

Возвращает список файлов и папок в соответствии с настройками фильтра FilenameFilter

public File[] listFiles()

Возвращает список полных путей файлов и папок

public File[] listFiles(FilenameFilter filter)

Возвращает список полных путей файлов и папок

в соответствии с настройками фильтра FilenameFilter

http://docs.oracle.com/javase/7/docs/api/java/io/File.html 14

Класс Console

http://docs.oracle.com/javase/7/docs/api/java/io/Console.html 15

Класс Console

Если в приложении необходимо реализовать ввод пароля или

какой-то другой скрытой информации, для этого необходимо

использовать readPassword() или readPassword(String,

Object...) и вручную сбрасывать возвращаемый символьный

массив для минимизации срока нахождения скрытой

информации в памяти.

Console cons; char[] passwd;

if (( cons = System.console() ) != null &&

( passwd = cons.readPassword("[%s]", "Password:")) != null)

{

... java.util.Arrays.fill(passwd, '');

}

16

Java IO и Java NIO (New/Non-blocked IO)

IO

NIO

Потокоориентированный Буфер-ориентированный

Блокирующий (синхронный) Неблокирующий

ввод/вывод

(асинхронный) ввод/вывод

Потоки ввода/вывода (streams) в Java IO являются блокирующими.

Когда в потоке выполнения (thread) вызывается read() или write() метод любого класса из пакета java.io.*, происходит блокировка до тех пор, пока данные не будут считаны/записаны. Поток выполнения в данный момент не может делать ничего другого.

Неблокирующий режим Java NIO позволяет запрашивать считанные данные из канала (channel) и получать только то, что доступно на данный момент, или вообще ничего, если доступных данных пока нет. Вместо

того, чтобы оставаться заблокированным, поток выполнения может

заняться чем-то другим.

17

Java IO и Java NIO

Потокоориентированный ввод/вывод (IO) подразумевает чтение/запись

из потока/в поток одного или нескольких байт в единицу времени

поочередно. Данная информация нигде не кэшируются – невозможно произвольно двигаться по потоку данных вперед или назад , если же это необходимо – придется сначала кэшировать данные в буфере.

Подход, на котором основан Java NIO немного отличается. Данные считываются в буфер для последующей обработки и по буферу можно двигаться вперед и назад. Это дает больше гибкости при обработке данных.

В то же время, необходимо проверять содержит ли буфер необходимый для корректной обработки объем данных.

Также необходимо следить, чтобы при чтении данных в буфер не были уничтожены ещё не обработанные данные, находящиеся в буфере.

18

Каналы ввода-вывода

Введенный в JDK 1.4, канал ввода/вывода считывает байты и

символы блоками, а не один байт/символ в единицу времени

import java.io.FilelnputStream; import java.io.FileOutputStream; import java.nio.channels.FileChannel; import java.nio.ByteBuffer; import java.io.FileNotFoundException; import java.io.IOException;

public class ByteChannelCopyTest {

public static void main(String[] args) {

try (FileChannel fcIn = new FilelnputStream(args[0]).getChannel();

FileChannel fcOut = new FileOutputStream(args[1).getChannel()) {

//создание буфера такого же размера, как размер файла

//и чтение в него файла одной операцией

ByteBuffer buff = ByteBuffer.allocate((int) fcIn.size()); fcIn.read (buff);

buff.position(0); fcOut.write(buff);

} catch (FileNotFoundException f) {

System.out.println("File not found: " + f) } catch (IOException e) {

System.out.println("IOException : " + e);

}

19

Класс java.nio.charset.Charset

static SortedMap availableCharsets()

Получает все наборы символов в виде карты, где ключи – имена,

а значения – сами наборы

static Charset forName(String name)

Возвращает набор символов для имени ByteBuffer

encode(String s)

Кодирует указанную строку в буфер байтов

CharBuffer decode(ByteBuffer buffer)

Декодирует указанный буфер байтов в строку

java.nio.ByteBuffer

Класс буфера, обслуживающего некоторый массив байт

java.nio.CharBuffer

Класс буфера символов

http://docs.oracle.com/javase/7/docs/api/java/nio/charset/Charset.html 20

Соседние файлы в папке lec