В 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/..
Скачать Исходный Код
$клон git $клон git
$cd java-ввод-вывод
Рекомендации
- Файл JavaDoc
- Путь JavaDoc
- Текущий рабочий каталог Java
Оригинал: “https://mkyong.com/java/how-to-get-the-filepath-of-a-file-in-java/”