Java 文件操作IO示例

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