java中的路径的读取注意
2020-10-02 本文已影响0人
早点起床晒太阳
相对路径方式
File file=new File("src/main/resources/demo.txt");
BufferedReader br=new BufferedReader(new FileReader(file));
String s = br.readLine();
System.out.println(s);
这种方式的话,在IDEA上是可以获取到文件,但是部署到linux上的话,就会找不到文件
原因是因为:将项目打包成Jar包或者war包后,此时就不会存在 src/main/resources 目录,JVM会在编译项目时,主动将 java文件编译成 class文件 和 resources 下的静态文件放在 target/classes目录下
classpath 方式
InputStream in = Test.class.getResourceAsStream("/demo.txt");
String str = IOUtils.toString(in, "utf8");
System.out.println(str);
InputStream in = Test.class.getResourceAsStream("/demo.txt");
这里是使用的getResourceAsStream的方式,采用绝对路径,绝对路径是相对于 classpath 根目录的路径,"/" 就代表着 classpath 这里必须以/开头
这种方式在IDEA和linux环境均可以读取到文件
结论
使用工程相对路径是靠不住的。
使用CLASSPATH路径是可靠的。
对于程序要读取的文件,尽可能放到CLASSPATH下,这样就能保证在开发和发布时候均正常读取。