Узнать путь файла 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
Как получить путь к файлу в Java
В этой статье показано, как получить путь к файлу или пути.
В Java для NIO Путь мы можем использовать путь.toAbsolutePath() чтобы получить путь к файлу; Для устаревшего ввода-вывода File мы можем использовать file.getAbsolutePath() для получения пути к файлу.
Для символических ссылок или путь к файлу содержит . или .. , мы можем использовать path.torealpath() или file.getCanonicalPath() , чтобы получить реальный путь к файлу.
Ниже приведено отображение файла и Путь .
- файл.getAbsolutePath() путь.Путь к абсолюту()
- файл.getCanonicalPath() путь.torealpath()
- файл.getParent() путь.getParent()
1. Получить путь к файлу файла (путь NIO).
Для java.nio.файла. Путь , мы можем использовать следующие API-интерфейсы для получения пути к файлу файла.
- путь.Путь к абсолюту() – Полный путь к файлу.
- путь.Тореальный путь()) – Для символических ссылок или разрешения . или .. символы в имени пути, по умолчанию по ссылке.
- путь.getParent() – Получить родительский каталог пути.
1.1 Путь = /home/mkyong/test/file.txt
Path path = Paths.get("/home/mkyong/test/file.txt"); path : /home/mkyong/test/file.txt path.toAbsolutePath() : /home/mkyong/test/file.txt path.getParent() : /home/mkyong/test path.toRealPath() : /home/mkyong/test/file.txt
1.2 Путь = file.txt , файл ссылается на текущий рабочий каталог + file.txt .
Path path = Paths.get("file.txt"); path : file.txt path.toAbsolutePath() : /home/mkyong/projects/core-java/java-io/file.txt path.getParent() : null path.toRealPath() : /home/mkyong/projects/core-java/java-io/file.txt
1.3 Путь = /главная/mkyong/тест/программная ссылка , символическая ссылка.
$ ln -s /home/mkyong/projects/core-java/java-io/src/main/java/com/mkyong/io/howto/GetFilePath.java /home/mkyong/test/soft-link
Path path = Paths.get("/home/mkyong/test/soft-link"); path : /home/mkyong/test/soft-link path.toAbsolutePath() : /home/mkyong/test/soft-link path.getParent() : /home/mkyong/test path.toRealPath() : /home/mkyong/projects/core-java/java-io/src/main/java/com/mkyong/io/howto/GetFilePath.java
1.4 Путь = /home/mkyong/test/../hello.txt
Path path = Paths.get("/home/mkyong/test/../hello.txt"); path : /home/mkyong/test/../hello.txt path.toAbsolutePath() : /home/mkyong/test/../hello.txt path.getParent() : /home/mkyong/test/.. path.toRealPath() : /home/mkyong/hello.txt
1.5 Ниже приведен полный пример Java для получения пути к файлу разных Путь .
package com.mkyong.io.howto; import java.io.IOException; import java.nio.file.Files; import java.nio.file.LinkOption; import java.nio.file.Path; import java.nio.file.Paths; public class GetFilePath1 < public static void main(String[] args) < // full path Path path1 = Paths.get("/home/mkyong/test/file.txt"); System.out.println("\n[Path] : " + path1); printPath(path1); // file name Path path2 = Paths.get("file.txt"); System.out.println("\n[Path] : " + path2); printPath(path2); // soft or symbolic link Path path3 = Paths.get("/home/mkyong/test/soft-link"); System.out.println("\n[Path] : " + path3); printPath(path3); // a path contains `..` Path path4 = Paths.get("/home/mkyong/test/../hello.txt"); System.out.println("\n[Path] : " + path4); printPath(path4); >static void printPath(Path path) < System.out.printf("%-25s : %s%n", "path", path); System.out.printf("%-25s : %s%n", "path.toAbsolutePath()", path.toAbsolutePath()); System.out.printf("%-25s : %s%n", "path.getParent()", path.getParent()); System.out.printf("%-25s : %s%n", "path.getRoot()", path.getRoot()); try < if (Files.notExists(path)) < return; >// default, follow symbolic link System.out.printf("%-25s : %s%n", "path.toRealPath()", path.toRealPath()); // no follow symbolic link System.out.printf("%-25s : %s%n", "path.toRealPath(nofollow)", path.toRealPath(LinkOption.NOFOLLOW_LINKS)); // alternative to check isSymbolicLink /*if (Files.isSymbolicLink(path)) < Path link = Files.readSymbolicLink(path); System.out.println(link); >*/ > catch (IOException e) < e.printStackTrace(); >> >
[Path] : /home/mkyong/test/file.txt path : /home/mkyong/test/file.txt path.toAbsolutePath() : /home/mkyong/test/file.txt path.getParent() : /home/mkyong/test path.getRoot() : / path.toRealPath() : /home/mkyong/test/file.txt path.toRealPath(nofollow) : /home/mkyong/test/file.txt [Path] : file.txt path : file.txt path.toAbsolutePath() : /home/mkyong/projects/core-java/java-io/file.txt path.getParent() : null path.getRoot() : null path.toRealPath() : /home/mkyong/projects/core-java/java-io/file.txt path.toRealPath(nofollow) : /home/mkyong/projects/core-java/java-io/file.txt [Path] : /home/mkyong/test/soft-link path : /home/mkyong/test/soft-link path.toAbsolutePath() : /home/mkyong/test/soft-link path.getParent() : /home/mkyong/test path.getRoot() : / path.toRealPath() : /home/mkyong/projects/core-java/java-io/src/main/java/com/mkyong/io/howto/GetFilePath.java path.toRealPath(nofollow) : /home/mkyong/test/soft-link [Path] : /home/mkyong/test/../hello.txt path : /home/mkyong/test/../hello.txt path.toAbsolutePath() : /home/mkyong/test/../hello.txt path.getParent() : /home/mkyong/test/.. path.getRoot() : / path.toRealPath() : /home/mkyong/hello.txt path.toRealPath(nofollow) : /home/mkyong/hello.txt
2. Получить путь к файлу файла (устаревший файл)
Для устаревшего ввода-вывода java.io . Файл , мы можем использовать следующие API-интерфейсы для получения пути к файлу.
- файл.getAbsolutePath() = путь.Путь к абсолюту()
- файл.getCanonicalPath() = путь.torealpath()
- файл.getParent() = путь.getParent()
package com.mkyong.io.howto; import java.io.File; import java.io.IOException; public class GetFilePath2 < public static void main(String[] args) < // full file path File file1 = new File("/home/mkyong/test/file.txt"); System.out.println("[File] : " + file1); printFilePath(file1); // a file name File file2 = new File("file.txt"); System.out.println("\n[File] : " + file2); printFilePath(file2); // a soft or symbolic link File file3 = new File("/home/mkyong/test/soft-link"); System.out.println("\n[File] : " + file3); printFilePath(file3); // a file contain `..` File file4 = new File("/home/mkyong/test/../hello.txt"); System.out.println("\n[File] : " + file4); printFilePath(file4); >// If a single file name, not full path, the file refer to // System.getProperty("user.dir") + file static void printFilePath(File file) < // print File = print file.getPath() System.out.printf("%-25s : %s%n", "file.getPath()", file.getPath()); System.out.printf("%-25s : %s%n", "file.getAbsolutePath()", file.getAbsolutePath()); try < System.out.printf("%-25s : %s%n", "file.getCanonicalPath()", file.getCanonicalPath()); >catch (IOException e) < e.printStackTrace(); >System.out.printf("%-25s : %s%n", "Parent Path", getParentPath(file)); > // if unable to get parent, try substring to get the parent folder. private static String getParentPath(File file) < if (file.getParent() == null) < String absolutePath = file.getAbsolutePath(); return absolutePath.substring(0, absolutePath.lastIndexOf(File.separator)); >else < return file.getParent(); >> >
[File] : /home/mkyong/test/file.txt file.getPath() : /home/mkyong/test/file.txt file.getAbsolutePath() : /home/mkyong/test/file.txt file.getCanonicalPath() : /home/mkyong/test/file.txt Parent Path : /home/mkyong/test [File] : file.txt file.getPath() : file.txt file.getAbsolutePath() : /home/mkyong/projects/core-java/java-io/file.txt file.getCanonicalPath() : /home/mkyong/projects/core-java/java-io/file.txt Parent Path : /home/mkyong/projects/core-java/java-io [File] : /home/mkyong/test/soft-link file.getPath() : /home/mkyong/test/soft-link file.getAbsolutePath() : /home/mkyong/test/soft-link file.getCanonicalPath() : /home/mkyong/projects/core-java/java-io/src/main/java/com/mkyong/io/howto/GetFilePath.java Parent Path : /home/mkyong/test [File] : /home/mkyong/test/../hello.txt file.getPath() : /home/mkyong/test/../hello.txt file.getAbsolutePath() : /home/mkyong/test/../hello.txt file.getCanonicalPath() : /home/mkyong/hello.txt Parent Path : /home/mkyong/test/..