Создание нового объекта 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