Java中Path.of方法的使用报错处理

Java 中 Path.of 方法的使用

起因

  学习 Java 核心技术这本书的 3.7.3 章节时,对于书中代码的实现出现了一些问题,书中所呈现的是这样的语句:
点击查看代码
Scanner in = new Scanner(Path.of("myfile"),StandardCharsets.UTF_8)
  在实现的过程中使用的 eclipse 编译器提示了这样的一个错误。
The method of is undefined for the type Path   显示 Path 类中并没有 of 这种方法, 去查了下官方文档,发现在 Java18 的文档中可以找到这个函数。

尝试解决的方案

  考虑到可能是我使用的 jdk 版本的问题,使用 java -version 命令发现我所使用的是 JDK8,而 JDK8 中并没有这个方法。这是在 JDK11 之后添加的方法,所以我们在 JDK8 下调用这个方法会出现错误。接下来我们关注一下 JDK8 的官方文档。
  我们可以看到在 java8 的文档中也存在着类似功能的方法。但是并没有类似于.of 方法的功能,但是在 paths 类中我找到了我们需要使用的方法。   这里面的 get 方法会将给定的字符串转化为 Path 对象中。所以对于 JDK8 我们应该使用这样的方法来达到我们读取文件的目的。

 下面我们通过代码来验证这种方法:

点击查看代码
import javax.lang.model.element.VariableElement;
import static java.lang.Math.*;

import java.io.;
import java.nio.
;
import java.util.*;

public class JavaDump {
public static void main(String args[]) throws IOException {
String dir = System.getProperty("user.dir");
Scanner in = new Scanner(Paths.get(dir, "myfile.txt"), "UTF-8");
System.out.println(in.nextLine());
System.out.println(in.nextLine());
System.out.println(in.nextLine());
System.out.println(in.nextLine());
System.out.println(in.nextLine());
in.close();
}
}

当然对于我们文件,文件的位置由 IDE 来控制,我们使用 getProperty 方法来得到这个路径,然后通过 paths.get 方法获得我们所需要的 Path 对象,通过这样的方式,我们成功的解决了报错,此外还需要注意的一点是在 JDK8 中 Scanner 的构造方法不可以直接接受 StandardCharsets 类型的对象,只能接收字符串形式的变量,所以我们要将先前的代码的参数改为 "UTF-8"。

结果如下图:

image

结论

在我们使用各种方法的时候,要注意不同 JDK 版本间的差别,遇到问题需要多查 JDK 文档,选择自己的 JDK 版本号,避免遇到同样的问题。