NIO 2 Flashcards

1
Q

FileSystem

A

Методы создания Path это шоркаты для FileSystems.getDefault().getPath(String,String…)
FileSystems позволяет вместо дефолтной файловой системы также получить удаленную FileSystem FileSystems.getFileSystem(URI)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Получение Path

A

Объект интерфейса Path можно получить:
из File- Path toPath()
статическим методом утилитного класса Paths (имеющего только данные два метода):
Paths get(String name,String …appendixes) фабричный метод- создает путь на основе введенных строк. Аппендиксы добавляются используя сепараторы.
Paths.get(URI).
И аналогичными статическими методами самого интерфейса Path:
Path.of(String name,String …appendixes)
Path.of(URI) - URI для файлов использует file:// протокол
Строковые пути как и у файла можно указывать и с сепаратароми linux систем и windows (экранированные до ) и относительные.
!!!Методы принимающие URI для некоторых систем не поддерживающих относительные пути могут иногда кидать IllegalArgumentException

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

URI

A

URI

Имеет паблик конструктор принимающий строку, кидает URISyntaxException если невалидный УРИ

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Path.relativize(path)

A

возвращает относительный путь аргумента относительно текущего пути. Если оба пути относительные, то считает что они относительны к одинаковой директории. Если оба абсолютные, то использует их абсолютные пути для высчитывания. Если один абсолютный, второй относительный- кидает IllegalArgumentException. Также кидает исключение если разные буквы дисков в Windows у путей.
!!!Не проверяет реальность существования файлов и даже букв дисков.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Опции в перегруженным методах Path и Files

A

Многие методы Path имеют перегрузку и принимают енамы опций:
LinkOption implements CopyOption,OpenOption например NOFOLLOW_LINKS
StandardCopyOption implements CopyOptions например ATOMIC_MOVE, COPY_ATTRIBUTES, REPLACE_EXISTING
StandardOpenOption implements OpenOptions например APPEND, CREATE,READ,TRUNCATE_EXISTING,WRITE,FOLLOW_LINKS
FileVisitOptions например FOLLOW_LINKS

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Path -методы получения сегментов- getName,getNameCount,getFileName,getParent,getRoot, subPath

A

Все эти методы могут работать с несуществующими путями):

1) getParent() возвращает Path пути до данного файла/папки без непосредственного имени, при этом отсавляет как есть петли (например help/../help) и возврашает не рельного родителя- а элемент в Path. Для относительных путей, не возвращает родителей у самого верхнего известного сегмента. Может вернуть root)
2) getFileName() возвращает имя файла или папки без пути
3) getRoot() -возвращает корневой элемент (для linux “/”) если путь абсолютный, иначе null
4) Path getName(index)-возвращает имя сегмента пути по индексу (корень индексом не помечается, и например для пути “/” невозможно вернуть ни одного имени. Однако пустой относительный путь возвращает один пустой сегмент “”). Для неверного индекса- IllegalArgumentException
5) int getNameCount()- возвращает количество сегментов
7) Path subPath(int beginIndex, int endIndex)- возврашает всегда относительный Path в виде сегментов из исходного пути. Для неверных индексов кинет IllegalArgumentException

final Path p1 = Paths.get(“/”);
final Path p2 = Paths.get(“”);
System.out.println(p1.getNameCount());
System.out.println(p2.getNameCount());

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Методы трансформации путей

A

1) Path normalize() -нормализует путь (убирает все излишние символы- например .. которые создают петлю). Но некоторые .. которые нужны для окрректности относительног опути оставляет
2) relativize(only Path)
3) resolve(Path or String)- суммирует. конкатенирует пути (без дублирования идентичной части). Если аргумент- абсолютный путь, то его и возвращает, так как невозможно приконкатенировать абсолютный путь.
4) Path toAbsolutePath() если данный путь относительный, то абсолютизирует его относительно текущей рабочей директории (можно получить через System.getProperty(“user.dir”)), если абсолютный- его и возвращает
5) Path toRealPath(LinkOptions…) throws IOException - нормализует путь, также абсолютизирует его, и проверяет реальность пути в ФС иначе кидает IOException. По дефолту резолвит симболик линки.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Превращение Path в другие объекты

A

toFile(), toUri(), toString() -возвращает разные представления пути.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Path Проверки путей starts/endsWith,isAbsolute

A

1) boolean startsWith,endsWith(Path) проверяет начинается заканчивается ли путь с указанного.
2) boolean isAbsolute() определяет абсолютен или относителен путь.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Files копирование, перемещение и удаление

A
Path copy(Path,Path,CopyOptions…) - копирует файл или директорию- делает shallow копию, то есть для папок не копирует поддерево. Без флага CopyOptions.REPLACE_EXISTING кинет IOException если target уже существует.
!!!второй аргумент это не папка под которую копировать, а именно полный путь который должен быть у скопированного файла.директории
long copy(Path, OutPutStream) и long copy (InputStream, Path, CopyOPtions…) - записывает из файла/стрима а файл стрим- возвращает количество вычитанных байтов
Path move(Path,Path,CopyOptions…) -полная копия по поведению copy , только удаляет исходный путь. Можно применить флаг ATOMIС_MOVE (в некоторых ФС кинет исключение)
void delete(Path) и boolean deleteIfExists(Path) оба удлаяют файлы, но директории только если они пустые (иначе IOException)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Files проверка путей exists/isSameFile

A

Все методы Files кроме exists кидают IOException):

boolean isSameFile(Path,Path) сравнивает два пути (и файлы и директории) являются ли они одним и тем же путем. Кидает IOException если какой либо из путей не существует (исключение- если пути изначально equals)
booelan exists/noExists(Path, LinkOptions…) проверяет существует ли путь.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Files создание папок

A
Path createDirectory(Path, FileAttributes…) создает одну директорию, если какие-либо родительские директории не существуют либо таргет директория уже существует кидает исключение.
Path createDirectories(Path, FileAttributes…)создает все пути при их отсутствии (нужно передавать без имени файла- или оно создаст папка и с именем файла))) Исключений не кидает
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Files чтение файлов

A

newBufferedWriter(Path, CopyOptions), new BufferedReader -создает ридеры, врайтеры для доступа к пути.

List readAllLines(Path) читает список всех строк файла (при попытке чтения папки- IOException).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Files получение отдельных метаданных- даты, доступ, тип, размер

A

boolean isDirectory(Path) и isRegularFile(Path), isSymbolicLinc() позволяет выяснить папка или файл представлены, и также символьная ли ссылка это (может быть как на папку так и на файл). Если проверяется файл или папка и путь это символическая ссылка, то сперва резолвит этму ссылку. Если путь не существует то возвращает false

boolean isHidden(), isReadable(), isWriteable(), isExecutable()- проверяет аттрибуты файла.лиректории- если их не существует возвращает false.
long size() throws IOException- размер файла в байтах, для директории зависит от типа ФС

FileTime getLastModified(Path, LinkOPtions…) -возврашает объект хранящий инфк о времени

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Files получение. чтение метаданных массово

A

BasicFileAttributes readAttributes(Path, Class, LinkOptions) возвращает все аттрибуты в одном объекте. Как класс можно передать либо общий BasicFileAttributes либо ОС специфичные PosixFileAttributes- для Linux/Mac или Dos/WindowFileAttributes(для Windows)

BasicFileAttributeView getFileAttributeView(Path, Class, LinkOptions) возвращает объект позволяющие модифицировать метаданные файла.директории (например setTimes позволяет модифицировать даты создания.модификации и т.д.). Как класс можно передать либо общий BasicFileAttributeVIew либо ОС специфичные PosixFileAttributeView- для Linux/Mac или Dos/WindowFileAttributeView(для Windows)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

FIles функциональные методы

A

Stream list(Path) если файл кидает IOException, иначе выводит всех прямых детей в папке как элементы стрима. Данный стрим должен быть закрыт (СТримы имплементят autocloseable)

Stream walk(Path, optional int depthLimit, FileVisitOptions…)- проходит по дереву ФС под указанным путем, используя in depth search логику. По дефолту не переходит по симболик линкам, однако можно передать опцию чтобы ходило- но тогда возможны циклы, когда симболик линка ведет на уже родителя (метод выкинет FileSystemLoopException если файл посещен дважды за время выполнения). По дефолту глубина почти безгранична, но ее можно ограничить.

Stream find(Path, int maxDepth, BiPredicate, FileVisitOptions…)- аналог walk, только все элементы результата подвергает тестированию удобного предиката

Stream lines(Path)- лениво читает контент файла в стрим строк-линий- ленивый аналог readAllLines(который может выкинуть OutOfMemoryError так как читает весь файл в память)