NIO 2 Flashcards
FileSystem
Методы создания Path это шоркаты для FileSystems.getDefault().getPath(String,String…)
FileSystems позволяет вместо дефолтной файловой системы также получить удаленную FileSystem FileSystems.getFileSystem(URI)
Получение Path
Объект интерфейса 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
URI
URI
Имеет паблик конструктор принимающий строку, кидает URISyntaxException если невалидный УРИ
Path.relativize(path)
возвращает относительный путь аргумента относительно текущего пути. Если оба пути относительные, то считает что они относительны к одинаковой директории. Если оба абсолютные, то использует их абсолютные пути для высчитывания. Если один абсолютный, второй относительный- кидает IllegalArgumentException. Также кидает исключение если разные буквы дисков в Windows у путей.
!!!Не проверяет реальность существования файлов и даже букв дисков.
Опции в перегруженным методах Path и Files
Многие методы 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
Path -методы получения сегментов- getName,getNameCount,getFileName,getParent,getRoot, subPath
Все эти методы могут работать с несуществующими путями):
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());
Методы трансформации путей
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. По дефолту резолвит симболик линки.
Превращение Path в другие объекты
toFile(), toUri(), toString() -возвращает разные представления пути.
Path Проверки путей starts/endsWith,isAbsolute
1) boolean startsWith,endsWith(Path) проверяет начинается заканчивается ли путь с указанного.
2) boolean isAbsolute() определяет абсолютен или относителен путь.
Files копирование, перемещение и удаление
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)
Files проверка путей exists/isSameFile
Все методы Files кроме exists кидают IOException):
boolean isSameFile(Path,Path) сравнивает два пути (и файлы и директории) являются ли они одним и тем же путем. Кидает IOException если какой либо из путей не существует (исключение- если пути изначально equals) booelan exists/noExists(Path, LinkOptions…) проверяет существует ли путь.
Files создание папок
Path createDirectory(Path, FileAttributes…) создает одну директорию, если какие-либо родительские директории не существуют либо таргет директория уже существует кидает исключение. Path createDirectories(Path, FileAttributes…)создает все пути при их отсутствии (нужно передавать без имени файла- или оно создаст папка и с именем файла))) Исключений не кидает
Files чтение файлов
newBufferedWriter(Path, CopyOptions), new BufferedReader -создает ридеры, врайтеры для доступа к пути.
List readAllLines(Path) читает список всех строк файла (при попытке чтения папки- IOException).
Files получение отдельных метаданных- даты, доступ, тип, размер
boolean isDirectory(Path) и isRegularFile(Path), isSymbolicLinc() позволяет выяснить папка или файл представлены, и также символьная ли ссылка это (может быть как на папку так и на файл). Если проверяется файл или папка и путь это символическая ссылка, то сперва резолвит этму ссылку. Если путь не существует то возвращает false
boolean isHidden(), isReadable(), isWriteable(), isExecutable()- проверяет аттрибуты файла.лиректории- если их не существует возвращает false. long size() throws IOException- размер файла в байтах, для директории зависит от типа ФС
FileTime getLastModified(Path, LinkOPtions…) -возврашает объект хранящий инфк о времени
Files получение. чтение метаданных массово
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)