Путь до директории java

Get current directory path in java

Getting the path of current directory is often required when you need to access some files from code generally for reading text or properties files.

This article will explain 4 different ways to get the path of current working directory in java or from java code.

Method 1 : Using System property
Java has defined some properties which are used to get information about its environment. One of such property is user.dir which gives the path of current working directory.

In order to retrieve the value of java properties, getProperty() method of java.lang.System class is used. This method is static and takes a string argument, which is the name of property.
Example,

String currentPath = System.getProperty("user.dir"); System.out.println("Current path is:: " + currentPath);

If you run this code from an IDE such as eclipse, then it will return the absolute path of the current project.

Method 2 : Using File class
java.io.File class has a constructor which takes a string argument. This argument represents the path to which the file object points.

Providing an empty path means that the file object is pointed to the current folder. Invoke getAbsolutePath() on the file object to get the complete path of current directory as shown below.

// create file object for current folder File file = new File(""); String currentPath = file.getAbsolutePath(); System.out.println("Current path is:: " + currentPath);

Method 3 : Using Paths
java.nio.file.Paths class introduced in java 7 is a utility class that contains static methods related to paths. It has a static get() method which takes a string argument representing a file path and returns an object of java.nio.file.Path .

Читайте также:  Text background colors css

Supplying empty string to get() means the current working directory.
Path object points to a physical file and its toAbsolutePath() method returns another Path object containing the absolute path of the file.

Invoke toString() method on this Path object to get the path of current working directory.
Java program code for this method is given below.

Path currentDirectoryPath = Paths.get("").toAbsolutePath(); String currentPath = currentDirectoryPath.toString(); System.out.println("Current directory path:: " + currentPath);

Method 4 : Using FileSystems class
For dealing with file system, java provides a class java.nio.file.FileSystem . Object of FileSystem can be retrieved using java.nio.file.FileSystems class using its static getDefault() method.

FileSystem has a getPath() method which takes a string argument representing the path of a file.
Supplying it an empty string means the current directory.
getPath() returns an object of Path and you can use its toAbsolutePath() method to get the full path of current directory.
Example,

FileSystem fileSystem = FileSystems.getDefault(); Path path = fileSystem.getPath("").toAbsolutePath() String currentDirectoryPath = path.toString();

Above code can be written as one-liner

String currentDirectoryPath = FileSystems.getDefault(). getPath(""). toAbsolutePath(). toString();

Hope the article was useful, click the clap below if you liked it.

Источник

Путь до директории java

Path testFile = Paths.get(«C:\\Users\\jleom\\Desktop\\java\\javarush task\\test.txt»); Path testFile2 = Paths.get(«C:\\Users\\jleom\\Desktop»); System.out.println(testFile.relativize(testFile2));

Класс Path и класс Paths предназначены для работы с файловой системой в Java, однако они предоставляют разные функции и методы. Path — это интерфейс, который определяет методы для работы с путями к файлам и каталогам в файловой системе. Он предоставляет ряд методов для работы с путями, таких как resolve(), relativize(), getParent(), getFileName(), toAbsolutePath() и другие. Paths — это утилитный класс, который предоставляет статические методы для создания экземпляров класса Path. Он не имеет методов для работы с путями напрямую, но предоставляет методы для создания экземпляров Path из строковых значений или URI. Еще методы по классу Paths: getFileSystem(): возвращает объект FileSystem, представляющий файловую систему, которой принадлежит данный путь. getDefault(): возвращает объект FileSystem, представляющий файловую систему по умолчанию. getTempDirectory(): возвращает объект типа Path, представляющий временный каталог. getHomeDirectory(): возвращает объект типа Path, представляющий домашний каталог пользователя. exists(Path path, LinkOption. options): проверяет, существует ли файл или каталог, представленный указанным путем. Класс Paths удобен для работы с файловой системой, так как он предоставляет простой и удобный API для работы с путями.

Надо добавить в статью, Paths.get был в 8 Java. Потом появился Path.of. Если у вас не работает Path.of (версия Java не позволяет), только тогда нужен Paths.get

Источник

Files, Path

— Отлично. Только что Билаабо рассказывал кучу интересного про File, и как с ним работать.

— Думаю, у меня как раз есть что добавить по этой теме.

— Да? Тогда с удовольствием послушаю.

— Тогда слушай. Java постоянно развивается, постоянно ищутся новые способы делать различные вещи эффективнее. Еще в Java 7 была добавлена альтернатива классу File.

Files, Path - 1

— Ага. Взяли за основу класс File, добавили в него немного нового, переименовывали методы, а в конце еще и разделили на два. Так что теперь есть два новых класса – Path и Files . Path – это фактически новый аналог класса File, а Files – это утилитный класс (по аналогии с классами Arrays & Collections), в него можно вынести все статические методы класса File. Так «правильнее» с точки зрения ООП.

— Ну, раз с точки зрения ООП, то – ок. А что поменялось-то?

— Во-первых, отказались от дублирования методов, которые возвращали String и File. В классе Path все методы возвращают Path .

Во-вторых, убрали многие статические утилитные методы в класс Files .

В третьих, удобнее стало работать с относительными путями.

Методы класса Path Описание
boolean isAbsolute() Возвращает true, если путь – абсолютный.
Path getRoot() Возвращает корень текущего пути – директорию самого верхнего уровня.
Path getFileName() Возвращает имя файла из текущего пути.
Path getParent() Возвращает директорию из текущего пути.
boolean startsWith(Path other) Проверяет, что текущий путь начинается с переданного пути.
boolean endsWith(Path other) Проверяет, что текущий путь заканчивается на переданный путь.
Path normalize() Нормализует текущий путь. Например, приводит путь «c:/dir/dir2/../a.txt» к пути «c:/dir/a.txt»
Path relativize(Path other) Вычисляет относительный путь двух путей – «разницу путей»
Path resolve(String other) Восстанавливает абсолютный путь по текущему и относительному.
URI toUri() Возвращает URI текущего пути/файла.
Path toAbsolutePath() Приводит путь к абсолютному, если был относительный.
File toFile() Возвращает объект File, который соответствует текущему объекту Path.

— Это тот путь, который был передан в конструктор объекта Path, методы которого вызываются. Path – это «путь» по-английски.

— Ок. А какие методы есть у класса Files ?

— Ну и куда же ты так спешишь-то? Сейчас все расскажу. Вот основные методы:

Методы класса Files Описание
Path createFile(…) Создает файл на диске.
Path createDirectory(…) Создает директорию.
Path createDirectories(…) Создает директорию и поддиректории.
Path createTempFile(…) Создает «временный файл»
Path createTempDirectory(…) Создает «временную директорию»
void delete(Path path) Удаляет файл/директорию.
Path copy(Path source, Path target,…) Копирует файл.
Path move(Path source, Path target,…) Перемещает файл.
boolean isSameFile(Path, Path) Сравнивает два файла.
boolean isDirectory(Path) Путь — это директория?
boolean isRegularFile(Path) Путь – это файл?
long size(Path) Возвращает размер файла.
boolean exists(Path) Объект с таким именем существует?
boolean notExists(Path) Объект с таким именем не существует?
long copy(Path, OutputStream) Копирует все байты из Path в OutputStream.
long copy(InputStream, Path) Копирует все байты из InputStream в Path.
byte[] read(InputStream, int initialSize) Читает массив байт из InputStream.
byte[] readAllBytes(Path path) Читает все байты из InputStream.
List readAllLines(Path path. ) Читает текстовый файл, возвращает список строк.
Path write(Path path, byte[] bytes,…) Пишет массив байт в файл.

— Как интересно, столько крутых функций, и все в одном месте.

А зачем нужны временные файлы?

— Ну, смотри. Допустим, ты хочешь скачать файл из интернета, а потом отправить его кому-то. Для этого очень удобно создать временный файл на диске и сохранять считанные данные в него.

— А сложно скачать файл из интернета?

— Очень просто. Смотри пример:

URL url = new URL("https://www.google.com.ua/images/srpr/logo11w.png"); InputStream inputStream = url.openStream(); Path tempFile = Files.createTempFile("temp-",".tmp"); Files.copy(inputStream, tempFile);

— Да, а что ты ожидал тут увидеть? Тут всего 4 строчки.

Строка номер 1. Создается объект URL, куда передается ссылка в интернете на файл с картинкой.

Строка номер 2. У объекта url открывается поток на чтение файла – InputStream.

Строка номер 4. С помощью метода createTempFile создается временный файл.

Строка номер 5. Метод Files.copy копирует данные из inputStream в tempFile . Все.

— Отлично, рад, что тебе понравилось. Думаю, с остальными методами ты разберёшься сам. А я попрошу Диего дать тебе несколько задачек на них.

Вот тебе, кстати, хорошая ссылка на этот материал:

Java-университет

читая лекцию и уже автоматом ощущается напряг:» где-то меня наёмывают, а где — пока не пойму, надо посмотреть каменты». здесь либо более компетентные люди, либо более человечные.

 URL url = new URL("https://www.google.com.ua/images/srpr/logo11w.png"); InputStream inputStream = url.openStream(); Path tempFile = Files.createTempFile("temp-",".tmp"); Files.copy(inputStream, tempFile, StandardCopyOption.REPLACE_EXISTING); System.out.println(tempFile); 

У меня такое чувство, что лекторы специально удаляют из лекций часть материала, иначе я не пойму почему описана и разобрана только часть методов. Вот самый очевидный вопрос, а как получить объект Path из String?

 URL url = new URL("https://www.google.com.ua/images/srpr/logo11w.png"); InputStream inputStream = url.openStream(); Path tempFile = Files.createTempFile("temp-",".tmp"); Files.copy(inputStream, tempFile); 

boolean exists(Path) Объект с таким именем существует? boolean notExists(Path) Объект с таким именем не существует? Гениально.

Долго не понимал, почему для файла и папки используется один класс — File или Path. Сейчас понял: мы, люди, привыкли, что файлы и папки — это разные сущности. Как банка сгущенки(файл) и коробка(папка). Но по сути, что банка сгущенки, что коробка — это емкости. А вот сама сгущенка — это и есть то, что мы привыкли называть файлом — набор данных. Память устройства — это огромное количество ячеек, где в каждую ячейку «записывается» 0 либо 1. Но наши данные — это огромные последовательности таких 1 и 0. Например, число типа int займет 4 байта, или 32 бита. И чтобы записать число типа int, например, 5, нам потребуется целых 32 ячейки памяти! Но нам же еще надо прочитать это число, а именно эту последовательность единиц и нулей. Для этого нам надо знать место на диске, где располагается эта последовательность. Так вот это место на диске — это и есть тот самый путь, который мы обычно указываем. Т.е. папка — это ящик, а название файла — это банка. Но это все по сути — просто ссылка на некую область памяти. Но здесь есть один момент. Нам надо понять, что это за последовательность единиц и нулей лежит перед нами — музыка, фильм, картинка чтобы знать, какой программой её прочитать. Для этого мы помечаем каждую такую последовательность путем добавления дополнительных маркерных единиц и нулей в её начало. Этот маркер и есть наше расширение файла, которой мы привыкли видеть. Поэтому любой файл на компьютере — это ссылка на область памяти, в которой лежат данные, а не сами данные.

Я один дико бомблю с контраста между лекциями и задачами? Лекция: «Это вот цифры, дружок, с помощью них ведут подсчет! Вот так-то ;)» Задачи: «Ты уже знаешь что такое цифры, так что вот тебе, дружок, задачка — найди ка все числа Армстронга и быстренько давай.»

Источник

Оцените статью