Java - 项目路径问题浅析
程序员文章站
2022-03-03 18:53:01
...
遇到的一个Java项目路径问题
文件位置:
天真的以为直接用相对路径就可以获取文件:
File file = new File( "src/main/resources/test.xlsx");
FileOutputStream out = new FileOutputStream(file);
System.out.println("文件路径为:" + file.getAbsolutePath());
结果却是报错了:
接下来花时间研究Java项目路径相关的东西,找原因,最后才发现原因很简单....:这个项目是父子多模块结构的项目,在它上面有父项目,new File( "src/main/resources/test.xlsx")的是项目根目录的,也就是父项目的根目录,如下:
File file = new File( "src/main/resources/test.xlsx");
// FileOutputStream out = new FileOutputStream(file);
System.out.println("相对路径为:" + file.getAbsolutePath());
输出:文件路径为:/Users/zhangxin/IdeaProjects/observer/src/main/resources/test.xlsx
所以,对于父子项目来说,使用相对路径是千万不能忘了子项目根目录这一层:
File file = new File( "observer_giant/src/main/resources/test.xlsx");
FileOutputStream out = new FileOutputStream(file);
System.out.println("相对路径为:" + file.getAbsolutePath());
问题解决了,梳理下Java获取文件的几种方式
-
new File() :
File file = new File( "observer_giant/src/main/resources/test.xlsx"); System.out.println("不带 / 是相对Java项目的根目录:" + file.getAbsolutePath()); File file1 = new File("/observer_giant/src/main/resources/test.xlsx"); System.out.println("带 / 是相对磁盘根目录,即绝对路径:" + file1.getAbsolutePath());
输出:不带 / 是相对Java项目的根目录:/Users/zhangxin/IdeaProjects/observer/observer_giant/src/main/resources/test.xlsx
带 / 是相对磁盘根目录,即绝对路径:/observer_giant/src/main/resources/test.xlsx -
利用类装载器
String path = FetchLoanCenter.class.getClassLoader().getResource("test.xlsx").getPath();
-
System.getProperty("user.dir") 获取项目根目录,可以以绝对路径找到文件
String path1 = System.getProperty("user.dir") + "observer_giant/src/main/resources/temp/test.xlsx";