Path основа файлового ввода-вывода в Java

Каждому разработчику приложений Java под базы данных Oracle нужно иметь представление и даже глубокие знания о Path. Path — один из основных классов, с которым придется научиться работать, чтобы освоить файловый ввод-вывод в рамках NIO.2. Обычно Path означает путь к элементу файловой системы, например к C:\workspace\java7developer (каталог в файловой системе Microsoft Windows) или /usr/bin/zip (местоположение утилиты ZIP в файловой системе *nix). Если вы подробно изучите, как создавать пути и манипулировать ими, то сможете выполнять навигацию в файловой системе любого типа, в том числе по таким системам, как ZIP-архив.

На рис. 1. мы кратко напоминаем о нескольких концепциях файловой системы:

  • дерево каталогов;
  • корень пути;
  • абсолютный путь;
  • относительный путь.

java path разработка под oracle

Рис. 1. Дерево каталогов, на котором показаны корень, абсолютный путь и относительный путь

Мы говорим об абсолютных и относительных путях, так как важно знать, где находится конкретное местоположение в файловой системе относительно того места, откуда запускается наше приложение. Например, приложение может запускаться из каталога /java7developer/src/test и у вас есть код, считывающий имена файлов из каталога /java7developer/src/main. Чтобы перейти в /java7developer/src/main, можно воспользоваться относительным путем ../main.

А что, если ваше приложение запускается из /java7developer/src/test/java/com/java7developer? В таком случае при использовании относительного пути от ../main вы не попадете в желаемый каталог (вместо этого вы окажетесь в несуществующем каталоге /java7developer/src/test/java/com/main). Действительно, в таком случае следует использовать абсолютный путь, например /java7developer/src/main.

Верно и обратное: ваше приложение может неизменно запускаться из одного и того же места (допустим, из целевого каталога на рис. 1.). Но корень дерева каталогов может измениться (например, с /java7developer на D:\workspace\j7d). В таком случае вы не можете полагаться на абсолютный путь — придется использовать относительные пути, чтобы надежно переходить в желаемые точки.

Путь (Path) в системе NIO.2 — это абстрактная конструкция. Можно создать путь Path и манипулировать им, даже если он не связан с каким-то конкретным физическим местоположением. Хотя это и может показаться нелогичным, в некоторых случаях такая возможность очень полезна. Например, может понадобиться создать путь, представляющий собой указание на новый файл, когда вы еще только собираетесь создать этот файл. Этот файл не существует, пока вы не задействуете метод Files.createFile(Path target)1. Если бы вы попытались считать содержимое файла, представленного через Path, до того, как он создан, то получили бы исключение IOException. Та же логика действует и в случае, когда вы указываете несуществующий Path и пытаетесь считать из него информацию с помощью метода, например, Files.readAllBytes(Path). Одним словом, виртуальная машина Java связывает Path с конкретным физическим местоположением только во время исполнения.


ВНИМАНИЕ! ВАЖНО!!! Будьте осторожны при написании кода, специфичного для файловой системы. Если создать путь Path со значением C:\workspace\java7developer, а потом попытаться считать информацию с этого адреса, то это сработает лишь на компьютерах, в файловой системе которых действительно существует местоположение C:\workspace\java7developer. Всегда следите за тем, чтобы ваша логика и порядок обработки исключений охватывали и случаи выполнения вашего кода в другой файловой системе, а также в файловой системе, структура которой может изменяться. Один из авторов книги как-то раз об этом забыл, из-за чего отказала целая серия жестких дисков на факультете информатики в его университете! (Не будем никого называть по именам, но можете сами попытаться распутать эту таинственную историю)


Класс Path подробно описан в табл. 1. (как и кое-какие другие классы, которые встретятся нам в этом разделе).

Таблица 1. Основные классы для изучения ввода-вывода файлов

 

Класс Описание
Path Класс Path содержит методы, которые могут использоваться для получения информации о пути, доступа к элементам пути, преобразования пути в другие формы или для извлечения фрагментов пути. Кроме того, здесь есть методы для сопоставления строки пути с другими строками и для удаления избыточности из пути
Paths Вспомогательный класс, предоставляющий вспомогательные методы для возвращения пути, например get(String first, String... more) и get(URI uri)
FileSystem Класс, служащий интерфейсом для файловой системы. Это может быть как файловая система, заданная по умолчанию, так и альтернативная файловая система, узнаваемая по уникальному идентификатору ресурса (URI)
FileSystems Вспомогательный класс, предоставляющий различные методы — например, метод FileSystems.getDefault(), возвращающий файловую систему, заданную по умолчанию

Не забывайте, что Path не обязательно должен представлять реальный файл или каталог. Вы можете манипулировать путем Path как вам угодно и использовать функционал Files, чтобы проверять, существует ли файл на самом деле. Если он существует, то с ним можно выполнять определенные операции.

СОВЕТ! Path можно использовать не только в традиционных файловых системах, но и в таких, как ZIP или JAR.

Исследуем класс Path, попытавшись решить пару простых задач:

  • создание Path;
  • получение информации о Path;
  • удаление избыточности из Path;
  • объединение двух Path, создание Path, представляющего собой путь между двумя Path, сравнение двух Path.

В следующей заметке блога рассмотрим на конкретном примере приложения Oracle создание пути Path для представления местоположения в файловой системе.

Вас заинтересует / Intresting for you:

Oracle IDE: JDeveloper, SQL De...
Oracle IDE: JDeveloper, SQL De... 3217 просмотров Ольга Потемкина Tue, 21 Nov 2017, 13:18:46
Oracle и Java: использование P...
Oracle и Java: использование P... 3872 просмотров sepia Tue, 08 May 2018, 08:52:34
Значения NULL в PL/SQL Oracle
Значения NULL в PL/SQL Oracle 2946 просмотров Дэн Wed, 01 Jul 2020, 08:10:56
Apex Oracle обучающий видеокур...
Apex Oracle обучающий видеокур... 6466 просмотров Дэн Sun, 05 Aug 2018, 16:36:33
Войдите чтобы комментировать