java中的路径的读取注意

2020-10-02  本文已影响0人  早点起床晒太阳

参考路径:
https://www.cnblogs.com/blogtech/p/11151780.html

相对路径方式
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下,这样就能保证在开发和发布时候均正常读取。

上一篇下一篇

猜你喜欢

热点阅读