Java中如何获取路径
Path类用于以编程方式表示文件系统中的路径(因此,也可以指向文件以及目录,甚至是不存在的文件)
可以使用Path类获得路径:
Path p1 = Paths.get("/var/www"); Path p2 = Paths.get(URI.create("file:///home/testuser/File.txt")); Path p3 = Paths.get("C:\Users\DentAr\Documents\HHGTDG.odt"); Path p4 = Paths.get("/home", "arthur", "files", "diary.tex");
路径操作
连接两个路径
可以使用resolve()方法连接路径。
传递的路径必须是部分路径,这是一个不包括根元素的路径。
Path p5 = Paths.get("/home/"); Path p6 = Paths.get("arthur/files"); Path joined = p5.resolve(p6); Path otherJoined = p5.resolve("ford/files"); joined.toString() == "/home/arthur/files" otherJoined.toString() == "/home/ford/files"
路径正常化
路径可能包含元素。
(指向我们当前的目录)和...(指向父目录)。
在路径中使用时, .可以随时删除,而不更改路径的目的地,并且可以与前一个元素一起删除。
使用Paths API,这是使用.normalize()方法完成:
Path p7 = Paths.get("/home/./arthur/../ford/files"); Path p8 = Paths.get("C:\Users\.\..\Program Files"); p7.normalize().toString() == "/home/ford/files" p8.normalize().toString() == "C:\Program Files"
检索有关路径的信息
有关路径的信息可以使用路径对象的方法来获取:
- toString()返回路径的字符串表示
Path p1 = Paths.get("/var/www"); //p1.toString() returns "/var/www"
- getFilename()返回文件名(或者更具体地,路径的最后一个元素
Path p1 = Paths.get("/var/www"); //p1.getFileName() returns "www" Path p3 = Paths.get("C:\Users\DentAr\Documents\HHGTDG.odt"); //p3.getFileName() returns "HHGTDG.odt"
- getNameCount()返回形成路径的元素数
Path p1 = Paths.get("/var/www"); //p1.getNameCount() returns 2
- getName(int index)返回给定索引处的元素
Path p1 = Paths.get("/var/www"); //p1.getName(0) returns "var", p1.getName(1) returns "www"
- getparent()返回父目录的路径
Path p1 = Paths.get("/var/www"); //p1.getParent().toString() returns "/var"
- getroot()返回路径的根目录
Path p1 = Paths.get("/var/www"); //p1.getRoot().toString() returns "/" Path p3 = Paths.get("C:\Users\DentAr\Documents\HHGTDG.odt"); //p3.getRoot().toString() returns "C:\"
使用文件系统检索信息
要与文件系统交互,请使用Files类的方法。
检查存在
要检查文件或者目录的存在路径点,请使用以下方法:
Files.exists(Path path)
和
Files.notExists(Path path)
!files.exist(path)不一定等于files.notexists(path),因为有三种可能的方案:
- 验证文件或者目录的存在(存在返回true和notexists在这种情况下返回false)
- 验证文件或者目录的不存在(存在返回false和notexists返回true)
- 可以验证文件或者文件的不存在性,例如由于访问限制而验证):不管是否存在,都返回false。
检查路径是否指向文件或者目录
这是使用files.isdirectory(Path path)和files.isregularfile(Path path)完成的。
Path p1 = Paths.get("/var/www"); Path p2 = Paths.get("/home/testuser/File.txt"); Files.isDirectory(p1) == true Files.isRegularFile(p1) == false Files.isDirectory(p2) == false Files.isRegularFile(p2) == true
获取属性
这可以使用以下方法完成:
- files.ableable(Path path)
- files.itable(Path path)
- files.isexecutable(Path path)
- files.Ishidden(Path path)
- files.issymboliclink(Path path)
获得mime类型
Files.probeContentType(Path path)
这试图获取文件的MIME类型。
它返回MIME类型字符串,如下所示:
- 文本文件的文本/简单
- HTML页面的文本/HTML
- PDF文件的应用程序/PDF
- PNG文件的图像/PNG
读取文件
可以使用文件类按字节或者按行读取文件。
Path p2 = Paths.get(URI.create("file:///home/testuser/File.txt")); byte[] content = Files.readAllBytes(p2); List linesOfContent = Files.readAllLines(p2);
files.ReadAllLines()可选地将Charset带有参数(默认为standardcharsets.utf_8):
List linesOfContent = Files.readAllLines(p2, StandardCharsets.ISO_8859_1);
写文件
可以使用文件类将数据按字节或者按行写入文件
Path p2 = Paths.get("/home/testuser/File.txt"); List lines = Arrays.asList( new String[]{"First line", "Second line", "Third line"}); Files.write(p2, lines); Files.write(Path path, byte[] bytes)
如果已有文件,将会被覆盖;
如果文件不存在,则将会创建。
日期:2020-06-02 22:15:24 来源:oir作者:oir